SpringBoot2.7 WebSecurityConfigurerAdapter类过期配置

Spring Boot 2.7 版本中,WebSecurityConfigurerAdapter 类过期了,改用了不同的方式进行安全配置。下面我将详细讲解这个过程。

WebSecurityConfigurerAdapter 类过期说明

在 Spring Boot 2.7 版本中,WebSecurityConfigurerAdapter 类被标记为 @Deprecated ,意味着该类不再建议使用,而是推荐使用其他方式进行安全配置。

之前,我们可以通过继承 WebSecurityConfigurerAdapter 类来进行安全配置。但是在 Spring Boot 2.7 及以上版本中,WebSecurityConfigurerAdapter 类不再被推荐。

相反,Spring Boot 2.7 推荐使用更加优雅的方式来配置安全,即使用方法级别的安全机制和 @EnableWebSecurity 注释。

使用方法级别的安全机制

在 Spring Boot 2.7 及以上版本中,方法级别的安全机制是最佳实践。它提供了更细粒度的安全保护。可以使用 @PreAuthorize、@PostAuthorize 和 @Secured 进行身份验证和访问控制。

@PreAuthorize 示例

@PreAuthorize 注释对应的方法会在方法被调用之前执行,用于身份验证。如果身份验证失败,则无法调用此方法。下面是一个简单的 @PreAuthorize 注释示例:

@Service
public class MyService {

    @PreAuthorize("hasRole('ROLE_USER')")
    public String secureMethod() {
        return "This method is secured with @PreAuthorize annotation";
    }
}

上面的示例中,secureMethod() 方法需要 ROLE_USER 角色才能被调用。

@PostAuthorize 示例

@PostAuthorize 注释对应的方法会在方法被调用之后执行,用于授权访问。如果授权失败,则无法访问此方法的返回值。下面是一个简单的 @PostAuthorize 注释示例:

@Service
public class MyService {

    @PostAuthorize("returnObject.username == authentication.name")
    public MyDTO getMyDto(String name) {
        return new MyDTO(name);
    }
}

上面的示例中,如果返回的 MyDTO 对象的 username 字段与当前认证用户的名称匹配,则可以访问该方法。

使用 @EnableWebSecurity 注释

在 Spring Boot 2.7 及以上版本中,使用 @EnableWebSecurity 注释来设置基本的 Web 安全服务。

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        // 在此处配置身份验证机制
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // 在此处配置请求安全保护规则
    }
}

上面的代码中,使用 @EnableWebSecurity 注释来启用 Web 安全服务。configureGlobal() 方法用于身份验证机制的配置,它需要通过 AuthenticationManagerBuilder 来进行配置。configure() 方法用于配置请求安全保护规则。

示例代码

下面是一个基于 Spring Security 的全局授权配置的样例代码:

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .antMatchers("/", "/home").permitAll() // 开放的URL,不需要登录
                .anyRequest().authenticated()  // 任何请求必须登录后才能访问
                .and()
                .formLogin()
                .loginPage("/login")  // 设置登录URL
                .permitAll()
                .and()
                .logout()
                .permitAll();
    }

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()  // 内存中的身份验证
                .withUser("user").password(encoder().encode("password")).roles("USER");
    }

    @Bean
    public PasswordEncoder encoder() {
        return new BCryptPasswordEncoder();  // 使用 BCrypt 加密
    }
}

以上配置会启用 Spring Security,并保护所有请求的访问。所有对 "/" 和 "/home" 的请求都会被允许,任何其他请求都必须登录后才能访问。

在登录页面("/login")中,可以使用使用 "user" 和 "password" 进行身份验证。

通过内存身份验证并且使用 BCryptPasswordEncoder 加密密码。

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

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • log4j如何根据变量动态生成文件名

    log4j是一个Java日志框架,在Java web开发中非常常用。它可以为我们提供完善的日志记录、使用方便、配置简单。在log4j中,使用动态文件名可以使日志文件名根据指定的规则动态地生成,可以方便地管理和查找日志文件。 下面是实现log4j动态文件名的完整攻略。 配置log4j.properties文件 在log4j.properties文件中配置文件名…

    Java 2023年6月15日
    00
  • 两种JAVA实现短网址服务算法

    下面是关于两种JAVA实现短网址服务算法的完整攻略。 一、算法介绍 在实现短网址服务时,通常需要将长URL转换为短字符串来实现,这时需要用到哈希算法。 解决方案一:MD5 MD5是一种广泛使用的哈希算法,它可以将任意长度的消息压缩为一个128位的哈希值。MD5哈希算法不可逆,因此可以很好地用来实现短网址服务。在此方案中,我们需要实现以下步骤: 获取长URL;…

    Java 2023年5月19日
    00
  • Java使用lambda表达式简化代码的示例详解

    下面是“Java使用lambda表达式简化代码的示例详解”的完整攻略。 什么是Lambda表达式 Lambda表达式是Java8中引入的一种新特性,它能够以一种简洁的方式来代替Java中的匿名内部类。Lambda表达式用于表示函数接口的一个方法,它不需要声明方法名、返回类型和参数类型,Lambda表达式完全匹配函数接口。 如何使用Lambda表达式 使用La…

    Java 2023年5月23日
    00
  • Android之解析JSON数据示例(android原生态,FastJson,Gson)

    下面是“Android之解析JSON数据示例”的完整攻略: 一、JSON数据格式简介 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于前后端间的数据传输。JSON数据格式本质上是一组键值对(即“属性”和“值”),使用大括号 {} 括起来表示一个对象,每个键值对用逗号 , 隔开,属性名和属性值之间使用冒号 : …

    Java 2023年5月26日
    00
  • 通过代码实例解析JAVA类生命周期

    通过代码实例解析JAVA类生命周期 Java中的类生命周期是指一个类从编写到被垃圾回收的整个过程,包括编译,加载,链接,初始化,使用和卸载等多个阶段。下面将通过代码实例来解析Java类生命周期。 1. 编写Java代码 首先,我们需要编写一个Java类的代码。以一个简单的HelloWorld程序为例,代码如下: public class HelloWorld…

    Java 2023年5月23日
    00
  • Gson中@JsonAdater注解的几种方式总结

    当我们使用Gson将Java对象序列化成JSON字符串或者JSON字符串反序列化成Java对象的时候,我们需要做一些特殊的处理,例如处理JSON字符串中的日期格式、处理JSON字符串中的空值、处理JSON字符串中特定字段的命名等等。Gson提供了@JsonAdapter注解来满足这些需求,它可以对序列化和反序列化过程中的数据进行自定义转换,下面我们来详细介绍…

    Java 2023年5月26日
    00
  • Java基础之重载(Overload)与重写(Override)详解

    Java基础之重载(Overload)与重写(Override)详解 什么是重载(Overload)? 重载指的是在同一个类中,可以使用相同的方法名,但是方法名后面的参数列表必须不同。也就是说,同一个方法名可以对应多个不同的方法,这些不同的方法在参数列表的类型、数量或者顺序上都有所区别。 重载方法的形式: // 仅仅参数类型不同 public void do…

    Java 2023年5月26日
    00
  • Java Spring中Bean的作用域及生命周期

    当我们在使用Java Spring框架的时候,经常会听到Bean这个词。Bean是Java Spring框架中的一个基础概念,每一个Bean实际上就是一个Java对象。在Spring中,Bean有不同的生命周期和作用域,这些都是我们必须了解的。 1. Bean的生命周期 Bean的生命周期主要分为三个部分:实例化、初始化和销毁。 1.1 实例化 在Sprin…

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