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日

相关文章

  • 详解从源码分析tomcat如何调用Servlet的初始化

    当Tomcat启动时,它会扫描WEB应用程序中的所有class文件,查找其中实现了Servlet接口的类,并在应用程序启动时初始化这些Servlet。下面是从源码分析Tomcat如何调用Servlet的初始化的完整攻略: 1. Servlet的定义 在Tomcat中,Servlet的定义是在javax.servlet.Servlet接口中定义的。每个Serv…

    Java 2023年6月2日
    00
  • Java获得指定区间数的方法

    以下是详细讲解“Java获得指定区间数的方法”的完整攻略。 情境描述 假设现在我们有一个整型数组 arr 以及两个指定的整数 left 和 right,我们需要从数组 arr 中找到所有满足 left <= arr[i] <= right 的数的个数。 解决方案 我们可以使用两种不同的方式解决这个问题,分别是迭代法和函数式编程法。 迭代法 我们可…

    Java 2023年5月26日
    00
  • 解析Java中PriorityQueue优先级队列结构的源码及用法

    解析Java中PriorityQueue优先级队列结构的源码及用法 什么是优先级队列? 优先级队列是一种特殊的队列,它会根据元素的优先级来决定队列中元素的顺序。在Java中,我们可以使用PriorityQueue类来实现优先级队列。 PriorityQueue源码解析 Java中的优先级队列主要由以下几个部分组成: PriorityQueue的构造函数 pu…

    Java 2023年5月19日
    00
  • HTTP协议详解_动力节点Java学院整理

    HTTP协议详解_动力节点Java学院整理 一、HTTP协议的基础知识 1.1 HTTP协议的定义 HTTP(Hypertext Transfer Protocol)是一种用于传输超媒体文档(例如HTML)的应用层协议。它是Web的基础协议,也是一种请求-响应协议,常用于客户端和服务器之间的通讯。 1.2 HTTP请求的基本格式 HTTP请求由三个部分组成,…

    Java 2023年6月15日
    00
  • jpa多数据源时Hibernate配置自动生成表不生效的解决

    下面是详细讲解“jpa多数据源时Hibernate配置自动生成表不生效的解决”的完整攻略。 背景 在使用JPA进行多数据源配置时,我们可能会遇到一个问题:配置了Hibernate自动生成表的语句,但是在应用启动时并没有执行SQL脚本,表也没有自动创建出来。这可能让人感到困惑,本文提供了一个可行的解决方案。 问题分析 首先,我们需要明确一点,如果在单数据源的情…

    Java 2023年5月20日
    00
  • 如何检查线程状态?

    以下是关于如何检查线程状态的完整使用攻略: 如何检查线程状态? 在 Java 中,可以使用 Thread 类的 getState() 方法来获取线程的状态。该方法返回一个 Thread.State 枚举类型的值,表示线程的状态。 示例一:使用 getState() 方法获取线程状态。可以使用以下代码实现: public class MyThread exte…

    Java 2023年5月12日
    00
  • SpringBoot自动配置特点与原理详细分析

    一、SpringBoot自动配置特点与原理分析 自动配置原理 SpringBoot的自动配置背后的原理是,通过条件注解来根据已有的bean、属性和类路径等来做出判断,自动调整项目的配置。 自动配置特点 约定优于配置:SpringBoot的自动配置遵循约定优于配置的原则,框架尽量避免使用XML等外置文件进行配置,采用内置默认配置的方式进行配置。 基于条件注解:…

    Java 2023年5月15日
    00
  • java 将字符串、list 写入到文件,并读取内容的案例

    一、将字符串写入文件并读取内容的案例 将字符串写入文件 import java.io.File; import java.io.FileWriter; import java.io.IOException; public class StringToFileExample { public static void main(String[] args) { …

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