Commit 1b3ff0e7d1beb0522907ac22b614ae6b61962856

Authored by xingyu4j
1 parent 7f8f79f9

fix: WebSecurityConfigurerAdapter 过期

yudao-example/yudao-sso-demo-by-code/src/main/java/cn/iocoder/yudao/ssodemo/framework/config/SecurityConfiguration.java
... ... @@ -2,17 +2,20 @@ package cn.iocoder.yudao.ssodemo.framework.config;
2 2  
3 3 import cn.iocoder.yudao.ssodemo.framework.core.filter.TokenAuthenticationFilter;
4 4 import cn.iocoder.yudao.ssodemo.framework.core.handler.AccessDeniedHandlerImpl;
  5 +import org.springframework.context.annotation.Bean;
5 6 import org.springframework.context.annotation.Configuration;
6 7 import org.springframework.http.HttpMethod;
7 8 import org.springframework.security.config.annotation.web.builders.HttpSecurity;
8   -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
  9 +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
9 10 import org.springframework.security.web.AuthenticationEntryPoint;
  11 +import org.springframework.security.web.SecurityFilterChain;
10 12 import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
11 13  
12 14 import javax.annotation.Resource;
13 15  
14 16 @Configuration(proxyBeanMethods = false)
15   -public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
  17 +@EnableWebSecurity
  18 +public class SecurityConfiguration{
16 19  
17 20 @Resource
18 21 private TokenAuthenticationFilter tokenAuthenticationFilter;
... ... @@ -22,8 +25,8 @@ public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
22 25 @Resource
23 26 private AuthenticationEntryPoint authenticationEntryPoint;
24 27  
25   - @Override
26   - protected void configure(HttpSecurity httpSecurity) throws Exception {
  28 + @Bean
  29 + protected SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception {
27 30 // 设置 URL 安全权限
28 31 httpSecurity.csrf().disable() // 禁用 CSRF 保护
29 32 .authorizeRequests()
... ... @@ -43,6 +46,7 @@ public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
43 46  
44 47 // 添加 Token Filter
45 48 httpSecurity.addFilterBefore(tokenAuthenticationFilter, UsernamePasswordAuthenticationFilter.class);
  49 + return httpSecurity.build();
46 50 }
47 51  
48 52 }
... ...
yudao-example/yudao-sso-demo-by-password/src/main/java/cn/iocoder/yudao/ssodemo/framework/config/SecurityConfiguration.java
... ... @@ -2,17 +2,20 @@ package cn.iocoder.yudao.ssodemo.framework.config;
2 2  
3 3 import cn.iocoder.yudao.ssodemo.framework.core.filter.TokenAuthenticationFilter;
4 4 import cn.iocoder.yudao.ssodemo.framework.core.handler.AccessDeniedHandlerImpl;
  5 +import org.springframework.context.annotation.Bean;
5 6 import org.springframework.context.annotation.Configuration;
6 7 import org.springframework.http.HttpMethod;
7 8 import org.springframework.security.config.annotation.web.builders.HttpSecurity;
8   -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
  9 +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
9 10 import org.springframework.security.web.AuthenticationEntryPoint;
  11 +import org.springframework.security.web.SecurityFilterChain;
10 12 import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
11 13  
12 14 import javax.annotation.Resource;
13 15  
14 16 @Configuration(proxyBeanMethods = false)
15   -public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
  17 +@EnableWebSecurity
  18 +public class SecurityConfiguration {
16 19  
17 20 @Resource
18 21 private TokenAuthenticationFilter tokenAuthenticationFilter;
... ... @@ -22,8 +25,8 @@ public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
22 25 @Resource
23 26 private AuthenticationEntryPoint authenticationEntryPoint;
24 27  
25   - @Override
26   - protected void configure(HttpSecurity httpSecurity) throws Exception {
  28 + @Bean
  29 + protected SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception {
27 30 // 设置 URL 安全权限
28 31 httpSecurity.csrf().disable() // 禁用 CSRF 保护
29 32 .authorizeRequests()
... ... @@ -43,6 +46,7 @@ public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
43 46  
44 47 // 添加 Token Filter
45 48 httpSecurity.addFilterBefore(tokenAuthenticationFilter, UsernamePasswordAuthenticationFilter.class);
  49 + return httpSecurity.build();
46 50 }
47 51  
48 52 }
... ...
yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoWebSecurityConfigurerAdapter.java
... ... @@ -5,16 +5,16 @@ import cn.iocoder.yudao.framework.web.config.WebProperties;
5 5 import com.google.common.collect.HashMultimap;
6 6 import com.google.common.collect.Multimap;
7 7 import org.springframework.boot.autoconfigure.AutoConfiguration;
8   -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
9 8 import org.springframework.context.ApplicationContext;
10 9 import org.springframework.context.annotation.Bean;
11 10 import org.springframework.http.HttpMethod;
12 11 import org.springframework.security.authentication.AuthenticationManager;
  12 +import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration;
13 13 import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
14 14 import org.springframework.security.config.annotation.web.builders.HttpSecurity;
15   -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
16 15 import org.springframework.security.config.http.SessionCreationPolicy;
17 16 import org.springframework.security.web.AuthenticationEntryPoint;
  17 +import org.springframework.security.web.SecurityFilterChain;
18 18 import org.springframework.security.web.access.AccessDeniedHandler;
19 19 import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
20 20 import org.springframework.web.method.HandlerMethod;
... ... @@ -34,7 +34,7 @@ import java.util.Set;
34 34 */
35 35 @AutoConfiguration
36 36 @EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
37   -public class YudaoWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {
  37 +public class YudaoWebSecurityConfigurerAdapter {
38 38  
39 39 @Resource
40 40 private WebProperties webProperties;
... ... @@ -72,11 +72,9 @@ public class YudaoWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdap
72 72 * 由于 Spring Security 创建 AuthenticationManager 对象时,没声明 @Bean 注解,导致无法被注入
73 73 * 通过覆写父类的该方法,添加 @Bean 注解,解决该问题
74 74 */
75   - @Override
76 75 @Bean
77   - @ConditionalOnMissingBean(AuthenticationManager.class)
78   - public AuthenticationManager authenticationManagerBean() throws Exception {
79   - return super.authenticationManagerBean();
  76 + public AuthenticationManager authenticationManagerBean(AuthenticationConfiguration authenticationConfiguration) throws Exception {
  77 + return authenticationConfiguration.getAuthenticationManager();
80 78 }
81 79  
82 80 /**
... ... @@ -96,8 +94,8 @@ public class YudaoWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdap
96 94 * rememberMe | 允许通过remember-me登录的用户访问
97 95 * authenticated | 用户登录后可访问
98 96 */
99   - @Override
100   - protected void configure(HttpSecurity httpSecurity) throws Exception {
  97 + @Bean
  98 + protected SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception {
101 99 // 登出
102 100 httpSecurity
103 101 // 开启跨域
... ... @@ -141,6 +139,8 @@ public class YudaoWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdap
141 139  
142 140 // 添加 Token Filter
143 141 httpSecurity.addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class);
  142 +
  143 + return httpSecurity.build();
144 144 }
145 145  
146 146 private String buildAppApi(String url) {
... ...