Spring Security 6.0尝鲜

Spring Security 6.0尝鲜

前言

首先我删除了之前几篇关于SpringSecurity整合SpringBoot的文章,对于收藏了我文章的用户表示抱歉。因为我自己也比较懒,其实应该还有很多东西需要继续写下去的,但最后还是没坚持写下去,与其让它继续留在那不三不四,不如直接删除,然后重新开篇记录新东西

SpringBoot 3.0与SpringFramework 6.0与SpringSecurity 6.0

随着SpringBoot更新到3.0版本,所使用的SpringFramework也来到了6.0版本。当我使用maven创建一个SpringBoot 3.0工程时,引入SpringSecurity的使用,版本自动调整为6.0。
这里不多说SpringBoot 3.0和SpringFramework 6.0更新了啥。重点来看下SpringSecurity 6.0的Whta’s New
以上是SpringSecurity的官方文档,其中
gh-11923 - Remove WebSecurityConfigurerAdapter. Instead, create a SecurityFilterChain bean.
这一条更新正是让我想写点东西做记录的原因。这一条更新改变了我们配置SpringSecurity的方式,删除了我们之前常用的WebSecurityConfigurerAdapter配置类,作为替代,我们需要创建类型为SecurityFilterChain的bean。
创建了一个最新的SpringBoot项目,从其他老项目里copy了些东西过来,打算改改搞点事情。当配置Spring Security的时候,发现不对了,然后发现版本更新到6.0了。懒惰如我,当然看看网上有没有使用攻略,翻了半天,有个大聪明在给我翻译英文文档,还翻译的不三不四的。那就自己写攻略咯

SecurityFilterChain与WebSecurityConfigurerAdapter的使用对比

使用WebSecurityConfigurerAdapter配置

@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
	@Resource
    private UserDetailsService userDetailsService;
    @Resource
    private PasswordEncoder passwordEncoder;
	@Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder);
    }
    
	@Override
    protected void configure(HttpSecurity http) throws Exception {
    	http.authorizeRequests()
    			.requestMatchers("/js/**","/css/**","/img/**").permitAll()
                .anyRequest().authenticated()
                .and()
                .formLogin().loginPage("/login").loginProcessingUrl("/login")
                .and()
                .logout().logoutUrl("/logout").logoutSuccessUrl("/index");
    }
}

省略UserDetailsService的创建过程,上面代码是从某个项目里提取出来的,直接用肯定会报错的啦。下面的是尝鲜时新写的,应该……可以放心用!

使用SecurityFilterChain配置

@Configuration
@EnableWebSecurity
public class WebSecurityConfig {

    @Bean
    public UserDetailsService userDetailsService() {
        InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
        manager.createUser(User.withDefaultPasswordEncoder().username("user").password("password").roles("USER").build());
        return manager;
    }

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http.authorizeHttpRequests().requestMatchers("/js/**","/css/**","/img/**").permitAll()
                .anyRequest().authenticated()
                .and()
                .formLogin().loginPage("/login").loginProcessingUrl("/login").permitAll()
                .and()
                .logout().logoutUrl("/logout").logoutSuccessUrl("/index");
        return http.build();
    }
}

对于只要程序能跑就行的我们来说,这些配置区别不大,不过就是authorizeRequests变成了authorizeHttpRequests嘛,没有深度使用SpringSecurity的项目,甚至可以直接从5.0到6.0迁移不做测试

写在最后

最后再提一句,虽然官方文档里说Spring Security 6.0依赖java 8及更高版本,但默认的是把它与SpringBoot 3.0合起来用,所以最好还是用java 17及更高版本啦。然后文档里用了大量的lambda表达式,对于我这种从java 1.7用到java 1.6的老家伙来说,太不友好了,我全给你改成不用lambda表达式的写法。欸嘿

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值