From edf049d9277d0f3b9c879391a038a3efd3f9fea4 Mon Sep 17 00:00:00 2001 From: wanggeng <450292408@qq.com> Date: Mon, 13 Feb 2023 09:59:49 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=94=AF=E6=8C=81=E8=87=AA?= =?UTF-8?q?=E5=AE=9A=E4=B9=89=E7=99=BB=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/ICustomUserSecurityConfig.java | 11 ++++++++++ .../main/java/ink/wgink/util/CastUtils.java | 17 +++++++++++++++ .../base/security/WebSecurityConfig.java | 21 +++++++++++++++++++ 3 files changed, 49 insertions(+) create mode 100644 basic-interface/src/main/java/ink/wgink/interfaces/config/ICustomUserSecurityConfig.java create mode 100644 basic-util/src/main/java/ink/wgink/util/CastUtils.java diff --git a/basic-interface/src/main/java/ink/wgink/interfaces/config/ICustomUserSecurityConfig.java b/basic-interface/src/main/java/ink/wgink/interfaces/config/ICustomUserSecurityConfig.java new file mode 100644 index 00000000..65d74c11 --- /dev/null +++ b/basic-interface/src/main/java/ink/wgink/interfaces/config/ICustomUserSecurityConfig.java @@ -0,0 +1,11 @@ +package ink.wgink.interfaces.config; + +/** + * @ClassName: ICustomUserSecurityConfig + * @Description: + * @Author: wanggeng + * @Date: 2023/2/13 09:27 + * @Version: 1.0 + */ +public interface ICustomUserSecurityConfig { +} diff --git a/basic-util/src/main/java/ink/wgink/util/CastUtils.java b/basic-util/src/main/java/ink/wgink/util/CastUtils.java new file mode 100644 index 00000000..c8887bfe --- /dev/null +++ b/basic-util/src/main/java/ink/wgink/util/CastUtils.java @@ -0,0 +1,17 @@ +package ink.wgink.util; + +/** + * @ClassName: CastUtils + * @Description: + * @Author: wanggeng + * @Date: 2023/2/13 09:25 + * @Version: 1.0 + */ +public class CastUtils { + + @SuppressWarnings("unchecked") + public static T cast(Object object) { + return (T) object; + } + +} diff --git a/login-base/src/main/java/ink/wgink/login/base/security/WebSecurityConfig.java b/login-base/src/main/java/ink/wgink/login/base/security/WebSecurityConfig.java index 068eb39d..2534675b 100644 --- a/login-base/src/main/java/ink/wgink/login/base/security/WebSecurityConfig.java +++ b/login-base/src/main/java/ink/wgink/login/base/security/WebSecurityConfig.java @@ -1,6 +1,7 @@ package ink.wgink.login.base.security; import ink.wgink.common.handler.AccessDenyHandler; +import ink.wgink.interfaces.config.ICustomUserSecurityConfig; import ink.wgink.interfaces.expand.login.ILoginHandlerService; import ink.wgink.interfaces.user.mongo.IMongoLoginUserService; import ink.wgink.login.base.handler.LoginFailureHandler; @@ -9,15 +10,20 @@ import ink.wgink.login.base.security.user.UserSecurityConfig; import ink.wgink.login.base.service.user.UserDetailServiceImpl; import ink.wgink.login.base.service.user.UserLoginService; import ink.wgink.properties.BaseProperties; +import ink.wgink.util.CastUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.config.annotation.SecurityConfigurerAdapter; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.security.web.DefaultSecurityFilterChain; import javax.servlet.http.HttpSession; +import java.util.Map; /** * @ClassName: WebSecurityConfig @@ -43,6 +49,8 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { private PasswordEncoder passwordEncoder; @Autowired(required = false) private IMongoLoginUserService mongoLoginUserService; + @Autowired + private ApplicationContext applicationContext; @Override protected void configure(HttpSecurity http) throws Exception { @@ -84,6 +92,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { .csrf() .disable(); addUserAuthenticationFilter(http, loginFailureHandler); + addCustomUserAuthenticationFilters(http); } /** @@ -105,6 +114,18 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { http.apply(userSecurityConfig); } + private void addCustomUserAuthenticationFilters(HttpSecurity http) throws Exception { + Map customUserSecurityConfigMap = applicationContext.getBeansOfType(ICustomUserSecurityConfig.class); + for (Map.Entry kv : customUserSecurityConfigMap.entrySet()) { + ICustomUserSecurityConfig value = kv.getValue(); + if (!(value instanceof SecurityConfigurerAdapter)) { + return; + } + SecurityConfigurerAdapter securityConfigurerAdapter = CastUtils.cast(value); + http.apply(securityConfigurerAdapter); + } + } + @Bean @Override public AuthenticationManager authenticationManagerBean() throws Exception {