SpringBoot2.7 WebSecurityConfigurerAdapter类过期配置

下面就为您详细讲解SpringBoot 2.7版本中WebSecurityConfigurerAdapter类过期配置的完整攻略。

1. WebSecurityConfigurerAdapter类过期原因

在SpringBoot2.7版本中,WebSecurityConfigurerAdapter类的configure(HttpSecurity http)方法被标记为@Deprecated(过期)。原因是SpringBoot团队在最新的安全性方案中对于HttpSecurity类提供了一个更高效的配置方式。

2. WebSecurityConfigurerAdapter类过期的配置方法

在SpringBoot2.7版本中,推荐使用以下方式对HttpSecurity进行配置:

2.1 配置HttpSecurity

使用以下代码创建一个WebSecurityConfigurerAdapter的内部类,并通过@EnableWebSecurity注解来启用Web安全性:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // 具体配置代码
    }
}

在configure(HttpSecurity http)方法中,您可以使用以下代码进行具体的配置:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests()
            .antMatchers("/public/**").permitAll()
            .anyRequest().authenticated()
            .and()
            .formLogin()
            .loginPage("/login").permitAll()
            .and()
            .logout().permitAll();
}

上面的代码表示只有认证通过的用户才能访问除了/public/**的所有资源,登录页面为/login,注销请求是"/logout"。

2.2 配置Security

使用以下代码创建WebSecurityConfigurerAdapter的内部类,并通过@EnableWebSecurity注解来启用Web安全性:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        // 具体配置代码
    }
}

在configure(AuthenticationManagerBuilder auth)方法中,您可以使用以下代码进行身份验证:

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth.inMemoryAuthentication()
            .withUser("user")
            .password("{noop}password")
            .roles("USER")
            .and()
            .withUser("admin")
            .password("{noop}password")
            .roles("USER", "ADMIN");
}

3. 示例说明

下面给出两个示例:

3.1 配置HttpSecurity

假设现在有一个控制器,上面标记了@RequestMapping注解,我们希望只有通过身份认证的用户才能访问该控制器,否则会重定向到登录页面。

  • 第一步:创建SecurityConfig类并启用Web安全性:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
            .antMatchers("/hello/**").authenticated()
            .anyRequest().permitAll()
            .and()
            .formLogin()
            .loginPage("/login")
            .defaultSuccessUrl("/hello")
            .failureUrl("/login?error")
            .permitAll()
            .and()
            .logout()
            .logoutUrl("/logout")
            .logoutSuccessUrl("/login")
            .permitAll();
    }
}
  • 第二步:编写Controller
@Controller
public class HelloWorldController {

    @GetMapping("/hello")
    public String helloWorld() {
        return "hello";
    }
}
  • 第三步:编写登录页面
<!DOCTYPE html>
<html>
<head>
    <title>登录页面</title>
</head>
<body>
    <h1>登录</h1>
    <div th:if="${param.error}">
        用户名或密码错误,请重新尝试。
    </div>
    <form th:action="@{/login}" method="post">
        用户名:<input type="text" name="username"/><br/>
        密&nbsp;&nbsp;&nbsp;码:<input type="password" name="password"/><br/>
        <input type="submit" value="登录"/>
    </form>
</body>
</html>

如果用户输入正确的用户名和密码,系统就会跳转到hello页面,否则就会重定向到登录页面。

3.2 配置AuthenticationManagerBuilder

假设现在有一个web服务需要进行身份验证,我们希望使用内存身份验证来完成这项工作。

  • 第一步:创建SecurityConfig类并启用Web安全性:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
            .withUser("user")
            .password("{noop}user")
            .roles("USER")
            .and()
            .withUser("admin")
            .password("{noop}admin")
            .roles("USER", "ADMIN");
    }
}
  • 第二步:创建控制器
@RestController
public class HelloWorldController {

    @GetMapping("/hello")
    public String helloWorld() {
        return "hello world";
    }
}
  • 第三步:测试

使用curl命令对服务进行测试:

curl -u user:user http://localhost:8080/hello

如果身份验证成功,服务将返回"hello world",否则会返回401 Unauthorized。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot2.7 WebSecurityConfigurerAdapter类过期配置 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • Java中关于子类覆盖父类的抛出异常问题

    Java中的异常处理机制是一个很重要的特性,可以帮助开发者更好的处理程序运行过程中可能出现的异常情况,使程序更加健壮和稳定。在子类覆盖父类的方法时,如果子类方法抛出的异常类型与父类方法不同,就会产生编译错误。本文将详细介绍Java中关于子类覆盖父类的抛出异常问题,并提供两个示例说明。 1. 子类覆盖父类抛出异常类型必须兼容 子类覆盖父类的方法时,抛出的异常类…

    Java 2023年5月27日
    00
  • Java中InputSteam怎么转String

    转换InputStream为String,可以使用Java中的Scanner类、BufferedReader类、ByteArrayOutputStream类、StringBuilder类等方式。 其中,Scanner类适用于转换小型InputStream,BufferedReader适用于转换大型InputStream,ByteArrayOutputStre…

    Java 2023年5月26日
    00
  • Java的Struts框架报错“ServletException”的原因与解决办法

    当使用Java的Struts框架时,可能会遇到“ServletException”错误。这个错误通常由以下原因之一起: 配置错误:如果配置文件中没有正确配置,则可能会出现此错误。在这种情况下,检查文件以解决此问题。 代码错误:如果代码中存在错误,则可能会出现此错误。在这种情况下,需要检查代码以解决此问题。 以下是两个实例: 例 1 如果配置文件中没有正确配置…

    Java 2023年5月5日
    00
  • java实现折半排序算法

    Java实现折半排序算法 折半排序(Binary Insertion Sort)是插入排序的一种改进版本,与插入排序相同的是,该算法的平均时间复杂度也为O(n^2),但是折半排序的优势在于其最坏时间复杂度为O(n^2)。 1. 算法原理 折半排序的算法原理如下: 从第2个元素开始,依次将元素插入到已排序的序列中。 每次插入时使用折半查找的方式,找到插入元素应…

    Java 2023年5月19日
    00
  • 详解JAVAEE——SSH三大框架整合(spring+struts2+hibernate)

    下面是“详解JAVAEE——SSH三大框架整合(spring+struts2+hibernate)”的完整攻略,并列举两条示例。 SSH框架整合方法详解 准备工作 首先,你需要准备好以下环境和工具: JDK 1.8+,建议使用最新的版本; Eclipse、IntelliJ IDEA等Java IDE; Maven3+,用于项目的构建; Tomcat9+,用于…

    Java 2023年5月19日
    00
  • Java实现在线预览的示例代码(openOffice实现)

    Java实现在线预览是许多Web应用程序开发中常用的技术之一。本文将讲解如何使用openOffice实现在线预览Java文档的方法。 前置条件 在开始本文之前,请确保您已经满足以下条件: 安装openOffice软件并启动该服务。 安装Java开发环境(JDK) 如果您使用的是Maven和Spring,您需要安装这些工具 实现步骤 导入依赖 如果您正在使用M…

    Java 2023年5月18日
    00
  • java实现数据库主键生成示例

    以下是java实现数据库主键生成示例的攻略: 1.了解数据库主键的概念 在数据库中,主键是唯一标识每条数据的一列或一组列。主键的作用是保证数据的唯一性和完整性,也可以用来加速数据查询。 2.主键生成方式 如果不提供主键,数据库会自动分配主键,这种方式称为自增长主键。而如果需要自己指定主键,就需要选定一个主键生成策略。 常见的主键生成策略有以下几种: 自增长主…

    Java 2023年5月20日
    00
  • jquery中的ajax异步上传

    下面是关于jQuery中的Ajax异步上传的完整攻略: 什么是Ajax异步上传 在之前不使用Ajax时,文件上传只能通过表单提交的方式,整个页面都要刷新。而现在采用Ajax提交方式,在页面不重载的情况下,上传文件并得到服务器端的响应。 异步上传的详细实现步骤: 设置一个表单,包含一个文件上传控件 <form action="your-url&…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部