Spring Security即将弃用配置类WebSecurityConfigurerAdapter
2022年的开工福利已经发布,点击下面按钮获取最新PDF。
用过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.authorizeHttpRequests
的permitAll
来实现。
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
,不限制数量,但是要注意有排序问题。相关的思维导图:
最后
很多技术方案都不是直接更改的,是会有一个变化的过程,只要你紧追变化,其实也就没有变化。这一篇是不是学会了不少呢?欢迎留言发表看法,当然点赞、再看也不能少哦。
附DEMO| 绝活!Spring Security过滤器就该这么配置
OAuth2授权服务器Keycloak宣布不再适配Spring Boot和Spring Security
文章来源: felord.blog.csdn.net,作者:码农小胖哥,版权归原作者所有,如需转载,请联系作者。
原文链接:felord.blog.csdn.net/article/details/123081005
- 点赞
- 收藏
- 关注作者
评论(0)