Spring Security配置文件新写法,解决 WebSecurityConfigurerAdapter 跟 withDefaultPasswordEncoder() 被标记 @Deprecate

学习 Spring Security 的时候发现通过继承 WebSecurityConfigurerAdapter 类来配置 Spring Security 5.7.2 发现 WebSecurityConfigurerAdapter 类被标记了 @Deprecated 说明这个类已经被弃用,在根据官方文档写新写法的过程中发现 UserDetails 类的 withDefaultPasswordEncoder() 方法也被标记了 @Deprecated 查官方文档如下:

所以我准备找一下新的写法应该怎么写,新的写法如下。

旧写法:

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    //设置密码加密
    @Bean
    PasswordEncoder passwordEncoder(){
        return new BCryptPasswordEncoder();
    }

    //配置过滤器
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        //开启HttpSecurity的配置
        http.authorizeRequests()
                //访问/admin/**模式的url必须具备admin的角色
                .antMatchers("/admin/**").hasRole("ADMIN")
                .antMatchers("/user/**").access("hasAnyRole('ADMIN','USER')")
                .anyRequest().authenticated().and()
                //开启表单验证
                .formLogin();
    }

    //用户认证
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
                //配置两个用户
                .withUser("root")
                //密码:1234
                .password("$2a$10$hoUNz8qpmLlemaJIAZMfJORFJYlF6g/T5uqoWAH1BkFHhL2BMcEay").roles("ADMIN")
                .and()
                .withUser("user")
                //密码1234
                .password("$2a$10$hoUNz8qpmLlemaJIAZMfJORFJYlF6g/T5uqoWAH1BkFHhL2BMcEay")
                .roles("USER");
    }
}

测试类:

@RestController
public class TestController {
    @GetMapping("/user/user1")
    public String user(){
        return "user";
    }

    @GetMapping("/admin/admin1")
    public String admin(){
        return "admin";
    }
}

先登录user用户进行测试:

测试结果如下:

user 用户的资源可以访问,admin 的资源不能访问

登录 admin 用户:

测试结果如下:

 

可见 user 用户资源可以访问,admin 的资源也可以访问,说明 Spring Security 的配置文件没有问题。

新写法:

@Configuration
@EnableWebSecurity
public class SecurityConfig {
    //开启密码加密
    @Bean
    PasswordEncoder passwordEncoder(){
        return new BCryptPasswordEncoder();
    }
    
    //配置过滤器
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        //开启HttpSecurity的配置
        http.authorizeRequests()
                //访问/admin/**模式的url必须具备admin的角色
                .antMatchers("/admin/**").hasRole("ADMIN")
                .antMatchers("/user/**").access("hasAnyRole('ADMIN','USER')")
                .anyRequest().authenticated().and()
                //开启表单验证
                .formLogin();

        return http.build();
    }
    
    //用户认证
    @Bean
    public UserDetailsService userDetailsService(){

        //创建两个用户
        UserDetails user =
                User.withUsername("root")
                        //密码1234
                        .password("$2a$10$hoUNz8qpmLlemaJIAZMfJORFJYlF6g/T5uqoWAH1BkFHhL2BMcEay")
                        .roles("ADMIN")
                        .build();

        UserDetails user1 =
                User.withUsername("user")
                        //密码1234
                        .password("$2a$10$hoUNz8qpmLlemaJIAZMfJORFJYlF6g/T5uqoWAH1BkFHhL2BMcEay")
                        .roles("USER")
                        .build();
        //这个方法接收的是UserDetails... users,所以可以传入多个user
        return new InMemoryUserDetailsManager(user,user1);
    }

}

测试类:

@RestController
public class TestController {
    @GetMapping("/user/user1")
    public String user(){
        return "user";
    }

    @GetMapping("/admin/admin1")
    public String admin(){
        return "admin";
    }
}

先登录 user 用户进行测试:

测试结果:

 

 user 用户的资源可以访问,admin 的资源不能访问

登录 admin 用户:

 测试结果:

 

 可见 user 用户资源可以访问,admin 的资源也可以访问,说明新的配置类写的是对的。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值