前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Security即将弃用配置类WebSecurityConfigurerAdapter

Spring Security即将弃用配置类WebSecurityConfigurerAdapter

作者头像
码农小胖哥
发布2022-04-06 13:49:36
9.6K0
发布2022-04-06 13:49:36
举报
文章被收录于专栏:码农小胖哥的码农生涯

用过WebSecurityConfigurerAdapter的都知道对Spring Security十分重要,总管Spring Security的配置体系。但是马上这个类要废了,你没有看错,这个类将在5.7版本被@Deprecated所标记了,未来这个类将被移除。

相关的issues已经被处理并关闭

对此对此网友大呼“学着学着就被弃用了”。既然马上要弃用了,总要有个过渡方案或者新玩法吧。

早在2021年3月份胖哥就写了一篇文章,把新玩法给明明白白说清楚了,如果你看了的话,肯定不会学废弃技术。这里把整套的替代方案再搞一遍,可别再学过时技术了。

❝版本需要Spring Security 5.4.x及以上。

HttpSecurity新旧玩法对比

旧玩法:

代码语言:javascript
复制
@Configuration
static class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .antMatcher("/**")
            .authorizeRequests(authorize -> authorize
                    .anyRequest().authenticated()
            );
    }
}

新玩法:

代码语言:javascript
复制
@Bean
SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
    return http
            .antMatcher("/**")
            .authorizeRequests(authorize -> authorize
                    .anyRequest().authenticated()
            )
            .build();
}

相关原理去看这一篇文章

WebSecurity新旧玩法对比

使用WebSecurity.ignoring()忽略某些URL请求,这些请求将被Spring Security忽略,这意味着这些URL将有受到 CSRF、XSS、Clickjacking 等攻击的可能。以下示例仅仅作为演示,请勿使用在生产环境。是不是又学到了呢?

旧玩法:

代码语言:javascript
复制
@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Override
    public void configure(WebSecurity web) {
        // 仅仅作为演示
        web.ignoring().antMatchers("/ignore1", "/ignore2");
    }

}

新玩法:

代码语言:javascript
复制
@Configuration
public class SecurityConfiguration {

    @Bean
    public WebSecurityCustomizer webSecurityCustomizer() {
        // 仅仅作为演示
        return (web) -> web.ignoring().antMatchers("/ignore1", "/ignore2");
    }

}

❝如果你需要忽略URL,请考虑通过HttpSecurity.authorizeHttpRequestspermitAll来实现。

AuthenticationManager新旧玩法对比

AuthenticationManager配置主要分为全局的(Global )、本地的(Local)。

旧玩法
代码语言:javascript
复制
@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.jdbcAuthentication();
    }
}

上面是通过WebSecurityConfigurerAdapter开启的是本地配置。开启全局配置需要覆写其authenticationManagerBean()方法并标记为Bean:

代码语言:javascript
复制
       @Bean(name name="myAuthenticationManager")
    @Override
    public AuthenticationManager authenticationManagerBean() throws Exception {
        return super.authenticationManagerBean();
    }
新玩法

本地配置通过HttpSecurity.authenticationManager实现:

代码语言:javascript
复制
@Configuration
public class SecurityConfiguration {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests((authz) -> authz
                .anyRequest().authenticated()
            )
            .httpBasic(withDefaults())
            .authenticationManager(new CustomAuthenticationManager());
    }

}

全局配置摆脱了依赖WebSecurityConfigurerAdapter.authenticationManagerBean()方法,只需要定义一个AuthenticationManager类型的Bean即可:

代码语言:javascript
复制
    @Bean
    AuthenticationManager ldapAuthenticationManager(
            BaseLdapPathContextSource contextSource) {
        LdapBindAuthenticationManagerFactory factory = 
            new LdapBindAuthenticationManagerFactory(contextSource);
        factory.setUserDnPatterns("uid={0},ou=people");
        factory.setUserDetailsContextMapper(new PersonContextMapper());
        return factory.createAuthenticationManager();
    }

当然还可以通过自定义GlobalAuthenticationConfigurerAdapter并注入Spring IoC来修改AuthenticationManagerBuilder,不限制数量,但是要注意有排序问题。相关的思维导图:

最后

很多技术方案都不是直接更改的,是会有一个变化的过程,只要你紧追变化,其实也就没有变化。这一篇是不是学会了不少呢?

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-02-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农小胖哥 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • HttpSecurity新旧玩法对比
  • WebSecurity新旧玩法对比
  • AuthenticationManager新旧玩法对比
    • 旧玩法
      • 新玩法
      • 最后
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档