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