WebSecurityConfigurerAdapter已弃用
配置数据库自定义的UserDetalisService的身份认证时,发现
WebSecurityConfigurerAdapter
已废弃,在网上查阅了官方的案例文档,再加上自己项目的自定义数据库认证方案,将参考内容整理如下,有问题欢迎大家指正。
在 Spring Security 5.7.0-M2 中,弃用了 WebSecurityConfigurerAdapter
,Spring 鼓励用户转向基于组件的安全配置。
配置 HttpSecurity
在 Spring Security 5.4 中,Spring 引入了通过创建 SecurityFilterChain
bean 来配置 HttpSecurity
的能力。
以下是使用 (不推荐使用)WebSecurityConfigurerAdapter
的示例配置,该配置使用 HTTP Basic
保护所有站点:
@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests((authz) -> authz
.anyRequest().authenticated()
)
.httpBasic(withDefaults());
}
}
推荐的方法是注册一个 SecurityFilterChain
bean:
@Configuration
public class SecurityConfiguration {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests((authz) -> authz
.anyRequest().authenticated()
)
.httpBasic(withDefaults());
return http.build();
}
}
配置WebSecurity
在 Spring Security 5.4 中,Spring 还引入了 WebSecurityCustomizer
。WebSecurityCustomizer
是一个回调接口,可用于自定义 WebSecurity
。
下面是使用 (不推荐使用)WebSecurityConfigurerAdapter
的示例配置,它忽略匹配 /ignore1
或 /ignore2
的请求:
@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
public void configure(WebSecurity web) {
web.ignoring().antMatchers("/ignore1", "/ignore2");
}
}
推荐的方法是注册一个 WebSecurityCustomizer
bean:
@Configuration
public class SecurityConfiguration {
@Bean
public WebSecurityCustomizer webSecurityCustomizer() {
return (web) -> web.ignoring().antMatchers("/ignore1", "/ignore2");
}
}
警告:如果将 WebSecurity 配置为忽略请求,请考虑通过 HttpSecurity#authorizeHttpRequests 使用 permitAll。有关其他详细信息,请参阅
configure
Javadoc。
全局认证管理器
要创建可供整个应用程序使用的 AuthenticationManager
,您只需将 AuthenticationManager
注册为 @Bean
。
@Configuration
public class SecurityConfiguration {
@Bean
public EmbeddedLdapServerContextSourceFactoryBean contextSourceFactoryBean() {
EmbeddedLdapServerContextSourceFactoryBean contextSourceFactoryBean =
EmbeddedLdapServerContextSourceFactoryBean.fromEmbeddedLdapServer();
contextSourceFactoryBean.setPort(0);
return contextSourceFactoryBean;
}
@Bean
AuthenticationManager ldapAuthenticationManager(
BaseLdapPathContextSource contextSource) {
LdapBindAuthenticationManagerFactory factory =
new LdapBindAuthenticationManagerFactory(contextSource);
factory.setUserDnPatterns("uid={0},ou=people");
factory.setUserDetailsContextMapper(new PersonContextMapper());
return factory.createAuthenticationManager();
}
}
本地身份验证管理器
在 Spring Security 5.6 中,Spring 引入了 HttpSecurity#authenticationManager 方法,它覆盖了特定 SecurityFilterChain
的默认 AuthenticationManager
。
下面是一个将自定义 AuthenticationManager
设置为默认值的示例配置:
@Configuration
public class SecurityConfiguration {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests((authz) -> authz
.anyRequest().authenticated()
)
.httpBasic(withDefaults())
.authenticationManager(new CustomAuthenticationManager());
return http.build();
}
}
基于数据库自定义UserDetailsService
这是自己使用的基于数据库与JWT的认证方案。
以下是使用 (不推荐使用)WebSecurityConfigurerAdapter
的示例配置,该配置使用 HTTP Basic
保护所有站点:
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter{
@Bean
public BCryptPasswordEncoder passwordEncoder(){
return new BCryptPasswordEncoder();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userServiceImpl);
}
@Override
public void configure(HttpSecurity httpSecurity) throws Exception {
//Configuring HttpSecurity
···
}
}
推荐的方法是注册一个 SecurityFilterChain
bean:
@Configuration
public class SecurityConfig{
@Bean
public BCryptPasswordEncoder passwordEncoder(){
return new BCryptPasswordEncoder();
}
@Bean
AuthenticationManager authenticationManager(HttpSecurity httpSecurity) throws Exception {
AuthenticationManager authenticationManager = httpSecurity.getSharedObject(AuthenticationManagerBuilder.class)
.userDetailsService(userServiceImpl)
.passwordEncoder(passwordEncoder())
.and()
.build();
return authenticationManager;
}
@Bean
public SecurityFilterChain securityFilterChain(AuthenticationManager authenticationManager, HttpSecurity httpSecurity) throws Exception {
//Configuring HttpSecurity
···
}
}
**
如果想了解基于数据库的自定义UserDetailsService的JWT方法,可以移步另一篇文章 基于数据库自定义UserDetailsService实现JWT认证
**
参考网页
1. 基于数据库的SpringSecurity配置
2. Spring Security without the WebSecurityConfigurerAdapter
相关文章
- 漫扯:从polling到Websocket
- 深入理解DIP、IoC、DI以及IoC容器
- Windows平台分布式架构实践 - 负载均衡
- 我的算法学习之路
- Visaul Studio 常用快捷键的动画演示
- 工欲善其事,必先利其器 之 VS2013全攻略(安装,技巧,快捷键,插件)!
- 码农提高工作效率
- SQL Server内存遭遇操作系统进程压榨案例
- dll文件32位64位检测工具以及Windows文件夹SysWow64的坑
- 好的用户界面-界面设计的一些技巧
- C#4.0泛型的协变,逆变深入剖析
- 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)
- 架构设计:远程调用服务架构设计及zookeeper技术详解(上篇)
- 也谈哈希表
- Hello Web API系列教程——Web API与国际化
- 设计十日谈[一]产品、设计
- 在创业型软件公司的收获
- 也谈项目经理与敏捷开发
- Chrome插件(Extensions)开发攻略
- 关于bug分析与异常处理的一些思考