Spring Security - 修复 WebSecurityConfigurerAdapter 已弃用
在这篇简短的文章中,我想分享如何摆脱在带有Spring Security的基于Spring的应用程序中的“WebSecurityConfigurerAdapter类型已被弃用”的警告。也许你习惯于有一个Spring配置类来扩展WebSecurityConfigurerAdapter抽象类,如下所示:这对于Spring Security版本5.6.5或更早版本,或者Spring Boot版本2.6.8或更早版本很好。但是,如果您的项目使用 Spring Security 5.7.1 或更高版本,或者 Spring Boot 2.7.0 或更高版本,您将在 IDE 中收到以下警告:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
@Configuration @EnableWebSecurity public class SecurityConfiguration extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { // configure HTTP security... } @Override public void configure(WebSecurity web) throws Exception { // configure Web security... } } |
WebSecurityConfigurerAdapter 类型已弃用
那么,为什么Spring Security不推荐使用WebSecurityConfigurerAdapter呢?,还有什么替代方案呢?这是因为Spring框架的开发人员鼓励用户转向基于组件的安全配置。因此,与其像旧方式那样扩展WebSecurityConfigurerAdapter并覆盖用于配置 HttpSecurity 和 WebSecurity 的方法 - 现在您声明两个类型为SecurityFilterChain和WebSecurityCustomizer的 bean,如下所示:供您参考,下面是将安全配置迁移到基于组件的方法的代码示例。首先,让我们看一下使用 WebSecurityConfigurerAdapter 的典型安全配置类,如下所示:下面是一个替代方案,没有WebSecurityConfigurerAdapter:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
@Configuration public class SecurityConfiguration { @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { } @Bean public WebSecurityCustomizer webSecurityCustomizer() { } } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
@Configuration @EnableWebSecurity public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Bean public UserDetailsService userDetailsService() { return new ShopmeUserDetailsService(); } @Bean public BCryptPasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests().antMatchers( "/login" ).permitAll() .antMatchers( "/users/**" , "/settings/**" ).hasAuthority( "Admin" ) .hasAnyAuthority( "Admin" , "Editor" , "Salesperson" ) .hasAnyAuthority( "Admin" , "Editor" , "Salesperson" , "Shipper" ) .anyRequest().authenticated() .and().formLogin() .loginPage( "/login" ) .usernameParameter( "email" ) .permitAll() .and() .rememberMe().key( "AbcdEfghIjklmNopQrsTuvXyz_0123456789" ) .and() .logout().permitAll(); http.headers().frameOptions().sameOrigin(); } @Override public void configure(WebSecurity web) throws Exception { web.ignoring().antMatchers( "/images/**" , "/js/**" , "/webjars/**" ); } } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
package net.codejava; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityCustomizer; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.web.SecurityFilterChain; @Configuration public class SecurityConfiguration { @Bean public UserDetailsService userDetailsService() { return new ShopmeUserDetailsService(); } @Bean public BCryptPasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http.authorizeRequests().antMatchers( "/login" ).permitAll() .antMatchers( "/users/**" , "/settings/**" ).hasAuthority( "Admin" ) .hasAnyAuthority( "Admin" , "Editor" , "Salesperson" ) .hasAnyAuthority( "Admin" , "Editor" , "Salesperson" , "Shipper" ) .anyRequest().authenticated() .and().formLogin() .loginPage( "/login" ) .usernameParameter( "email" ) .permitAll() .and() .rememberMe().key( "AbcdEfghIjklmNopQrsTuvXyz_0123456789" ) .and() .logout().permitAll(); http.headers().frameOptions().sameOrigin(); return http.build(); } @Bean public WebSecurityCustomizer webSecurityCustomizer() { return (web) -> web.ignoring().antMatchers( "/images/**" , "/js/**" , "/webjars/**" ); } } |
声明一个类型为 AuthenticationManager 的 Bean:
如果您需要公开AuthenticationManager 类型的 Bean,您可以输入以下代码:
1
2
3
4
5
|
@Bean public AuthenticationManager authenticationManager( AuthenticationConfiguration authConfig) throws Exception { return authConfig.getAuthenticationManager(); } |
声明一个 AuthenticationProvider 类型的 bean:
如果您需要公开 AuthenticationProvider 类型的 Bean,例如DaoAuthenticationProvider,请使用以下代码:并在SecurityFilterChain的代码中为 HttpSecurity 指定此身份验证提供程序,如下所示:这就是在具有 Spring 安全性的基于 Spring 的应用程序中删除警告“WebSecurityConfigurerAdapter 已弃用”的警告的方法。您需要声明SecurityFilterChain和 WebSecurityCustomizer bean,而不是覆盖WebSecurityConfigurerAdapter类的方法。注意:如果您不想更改当前代码,则应保持 Spring 引导版本低于 2.7.0 或 Spring Security 版本低于 5.7.1。我希望这篇文章对您有所帮助。感谢您的阅读。参考:没有 WebSecurityConfigurerAdapter 的 Spring 安全性
1
2
3
4
5
6
7
8
9
|
@Bean public DaoAuthenticationProvider authenticationProvider() { DaoAuthenticationProvider authProvider = new DaoAuthenticationProvider(); authProvider.setUserDetailsService(userDetailsService()); authProvider.setPasswordEncoder(passwordEncoder()); return authProvider; } |
1
|
http.authenticationProvider(authenticationProvider()); |
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhfkjhkf
-
Spring Security - 修复 WebSecurityConfigurerAdapter 已弃用
-
JdbcTemplate+参数+查询操作展示、更新操作展示、批量操作展示、PreparedStatement操作展示
-
Mybatis-PlusWrapper条件构造器的使用
-
Error attempting to get column ‘create_time’ from result set. Cause: java.sql.SQLFeatureNotSupported
-
Java+SpringBoot+vue实现图书借阅和销售商城一体化系统
-
SASL config status: Will not attempt to authenticate using SASL (unknown error)
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
photoshop蒙版画笔没反应怎么办
PHP中文网 06-24