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 {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeHttpRequests((authz) -> authz.anyRequest().authenticated()).httpBasic(withDefaults());}
}
推荐的方法是注册一个 SecurityFilterChain bean:
@Configuration
public class SecurityConfiguration {@Beanpublic 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 {@Overridepublic void configure(WebSecurity web) {web.ignoring().antMatchers("/ignore1", "/ignore2");}
}
推荐的方法是注册一个 WebSecurityCustomizer bean:
@Configuration
public class SecurityConfiguration {@Beanpublic WebSecurityCustomizer webSecurityCustomizer() {return (web) -> web.ignoring().antMatchers("/ignore1", "/ignore2");}
}
警告:如果将 WebSecurity 配置为忽略请求,请考虑通过 HttpSecurity#authorizeHttpRequests 使用 permitAll。有关其他详细信息,请参阅
configureJavadoc。
全局认证管理器
要创建可供整个应用程序使用的 AuthenticationManager,您只需将 AuthenticationManager 注册为 @Bean。
@Configuration
public class SecurityConfiguration {@Beanpublic EmbeddedLdapServerContextSourceFactoryBean contextSourceFactoryBean() {EmbeddedLdapServerContextSourceFactoryBean contextSourceFactoryBean =EmbeddedLdapServerContextSourceFactoryBean.fromEmbeddedLdapServer();contextSourceFactoryBean.setPort(0);return contextSourceFactoryBean;}@BeanAuthenticationManager 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 {@Beanpublic 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{@Beanpublic BCryptPasswordEncoder passwordEncoder(){return new BCryptPasswordEncoder();}@Overrideprotected void configure(AuthenticationManagerBuilder auth) throws Exception {auth.userDetailsService(userServiceImpl);}@Overridepublic void configure(HttpSecurity httpSecurity) throws Exception {//Configuring HttpSecurity···}
}
推荐的方法是注册一个 SecurityFilterChain bean:
@Configuration
public class SecurityConfig{@Beanpublic BCryptPasswordEncoder passwordEncoder(){return new BCryptPasswordEncoder();}@BeanAuthenticationManager authenticationManager(HttpSecurity httpSecurity) throws Exception {AuthenticationManager authenticationManager = httpSecurity.getSharedObject(AuthenticationManagerBuilder.class).userDetailsService(userServiceImpl).passwordEncoder(passwordEncoder()).and().build();return authenticationManager;}@Beanpublic SecurityFilterChain securityFilterChain(AuthenticationManager authenticationManager, HttpSecurity httpSecurity) throws Exception {//Configuring HttpSecurity···}
}
**
如果想了解基于数据库的自定义UserDetailsService的JWT方法,可以移步另一篇文章 基于数据库自定义UserDetailsService实现JWT认证
**
参考网页
1. 基于数据库的SpringSecurity配置
2. Spring Security without the WebSecurityConfigurerAdapter
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
