Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/blog-api.lequ7.com/wp-content/plugins/wp-cors/wp-cors.php on line 28

Warning: Undefined array key "HTTP_ORIGIN" in /www/wwwroot/blog-api.lequ7.com/wp-content/plugins/wp-cors/wp-cors.php on line 29
关于java:Spring-Security即将弃用WebSecurityConfigurerAdapter配置类 乐趣区的后端

关于java:Spring-Security即将弃用WebSecurityConfigurerAdapter配置类

83次阅读
没有评论

用过 WebSecurityConfigurerAdapter 的都晓得对Spring Security非常重要,总管Spring Security的配置体系。然而马上这个类要废了,你没有看错,这个类将在5.7版本被@Deprecated所标记了,将来这个类将被移除。

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

早在2021年3月份胖哥就写了一篇文章,把新玩法给明明白白说分明了,如果你看了的话,必定不会学废除技术。这里把整套的代替计划再搞一遍,可别再学过期技术了。

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

HttpSecurity新旧玩法比照

旧玩法:

@Configuration
static class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .antMatcher("/**")
            .authorizeRequests(authorize -> authorize
                    .anyRequest().authenticated()
            );
    }
}

新玩法:

@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 等攻打的可能。以下示例仅仅作为演示,请勿应用在生产环境。是不是又学到了呢?

旧玩法:

@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

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

}

新玩法:

@Configuration
public class SecurityConfiguration {

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

}

如果你须要疏忽URL,请思考通过HttpSecurity.authorizeHttpRequestspermitAll来实现。

AuthenticationManager新旧玩法比照

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

旧玩法

@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

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

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

       @Bean(name name="myAuthenticationManager")
       @Override
       public AuthenticationManager authenticationManagerBean() throws Exception {
           return super.authenticationManagerBean();
       }

新玩法

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

@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即可:

    @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,不限度数量,然而要留神有排序问题。相干的思维导图:

最初

很多技术计划都不是间接更改的,是会有一个变动的过程,只有你紧追变动,其实也就没有变动。

关注公众号:Felordcn 获取更多资讯

集体博客:https://felord.cn

正文完
 0
评论(没有评论)