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 tapestry5 布局 参数的处理

    下面我将为你详细讲解“Java Tapestry5 布局参数的处理”的完整攻略。 什么是 Tapestry5 布局参数? 在 Tapestry5 中,布局参数是一种可重复利用的组件,在组合多个组件以创建页面模板时特别有用。布局组件提供了一种创建大量页面模板的方法,这些模板共享相同的标头、页脚和菜单结构等元素。 布局参数则是在这些布局组件中动态传递的一些参数,…

    Java 2023年6月15日
    00
  • Java十分钟精通类 封装 继承

    Java 十分钟精通类 封装 继承 Java 是面向对象编程语言,其中类、封装和继承是 OOP 的核心概念。在本文中,我们将介绍如何使用 Java 快速掌握这些概念。 类 在 Java 中,类是一种用于描述对象的结构。通过类定义,我们可以定义一个对象的属性和行为,从而为对象提供一个有意义的结构。Java 中的类定义如下: public class Class…

    Java 2023年5月26日
    00
  • IDEA 当前在线人数和历史访问量的示例代码

    为了展示当前在线人数和历史访问量,网站可以利用后端技术和前端技术实现。 一、后端技术: 后端技术可以利用数据库和服务器进行实现。 数据库存储在线人数和历史访问量的数据。 首先,在数据库中创建一个数据表,包含两个字段:online_users 和 visit_count。分别用于存储当前在线人数和历史访问量的数据。其中,online_users 可以利用 se…

    Java 2023年6月15日
    00
  • Java中自己如何实现log2(N)

    在Java中,使用Math库中的log10方法可以计算任何数的对数。但是,如果要计算一个数的以2为底的对数(即log2(N)),则需要进行一些额外的计算。下面是Java中实现log2(N)的完整攻略: 方法一:利用Math库中的log10方法和换底公式将log2(N)转换为log10(N) / log10(2) public static double lo…

    Java 2023年5月26日
    00
  • MyBatis带参查询的方法详解

    当我们使用MyBatis进行数据访问时,经常需要传入参数进行查询操作。在MyBatis中,带参查询的方法非常常见,本文将分为以下几个部分详细讲解带参查询的方法及其用法。 1. 概述 MyBatis支持多种传参方式,包括单个参数、Map、@Param注解、JavaBean等。但无论哪种方式,都遵循以下规则: 在SQL中通过#{}占位符来表示参数。 Java类型…

    Java 2023年5月20日
    00
  • Java常用JVM参数实战

    Java常用JVM参数实战 Java虚拟机(JVM)是Java语言的核心,它在执行Java程序时起到了关键的作用。Java虚拟机参数可以控制Java应用程序的各种执行行为,优化Java程序的性能和资源利用率。在本篇文章中,我将分享Java常用JVM参数的实际应用,分析它们的作用和效果。 本文主要包含以下几个方面: 启动JVM参数 Java虚拟机启动时通过设置…

    Java 2023年5月26日
    00
  • 详解Spring中BeanUtils工具类的使用

    详解Spring中BeanUtils工具类的使用 什么是BeanUtils BeanUtils是Apachecommons的一个工具类库。它提供了一些方法来方便地实现JavaBean的属性复制、类型转换等操作。在Spring中,BeanUtils也被广泛应用在属性复制、对象转换等操作中。 BeanUtils的优点 BeanUtils具有以下几个优点: 简单易…

    Java 2023年5月19日
    00
  • 一文带你搞懂Java中的递归

    一文带你搞懂Java中的递归 什么是递归 递归是一种解决问题的方法,它通过将问题分解成更小的子问题,并通过调用自身来解决它们。在编程中,递归允许您使用相同的代码来处理不同的输入,这使得代码更加简洁和更容易理解。 Java中的递归 在Java中,递归的实现非常简单。通常,递归函数有两个部分:基本情况和递归情况。基本情况通常是递归函数停止递归的条件,好比说输入参…

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