增加支持自定义登录

This commit is contained in:
wanggeng 2023-02-13 09:59:49 +08:00
parent 5939855754
commit edf049d927
3 changed files with 49 additions and 0 deletions

View File

@ -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 {
}

View File

@ -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> T cast(Object object) {
return (T) object;
}
}

View File

@ -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<String, ICustomUserSecurityConfig> customUserSecurityConfigMap = applicationContext.getBeansOfType(ICustomUserSecurityConfig.class);
for (Map.Entry<String, ICustomUserSecurityConfig> kv : customUserSecurityConfigMap.entrySet()) {
ICustomUserSecurityConfig value = kv.getValue();
if (!(value instanceof SecurityConfigurerAdapter)) {
return;
}
SecurityConfigurerAdapter<DefaultSecurityFilterChain, HttpSecurity> securityConfigurerAdapter = CastUtils.cast(value);
http.apply(securityConfigurerAdapter);
}
}
@Bean
@Override
public AuthenticationManager authenticationManagerBean() throws Exception {