UserDetailsService 提供替换能力,方便独立授权服务器是,使用远程调用确认登录

This commit is contained in:
b2baccline
2021-07-19 11:33:53 +08:00
parent 691fda34be
commit ff3ea462d2
5 changed files with 53 additions and 16 deletions

View File

@@ -11,10 +11,23 @@
<artifactId>ballcat-auth-biz</artifactId> <artifactId>ballcat-auth-biz</artifactId>
<dependencies> <dependencies>
<dependency>
<groupId>com.hccake</groupId>
<artifactId>ballcat-common-security</artifactId>
</dependency>
<dependency>
<groupId>com.hccake</groupId>
<artifactId>ballcat-spring-boot-starter-redis</artifactId>
</dependency>
<dependency>
<groupId>com.hccake</groupId>
<artifactId>ballcat-system-model</artifactId>
</dependency>
<dependency> <dependency>
<groupId>com.hccake</groupId> <groupId>com.hccake</groupId>
<artifactId>ballcat-system-biz</artifactId> <artifactId>ballcat-system-biz</artifactId>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.anji-plus</groupId> <groupId>com.anji-plus</groupId>
<artifactId>captcha</artifactId> <artifactId>captcha</artifactId>

View File

@@ -2,8 +2,9 @@ package com.hccake.ballcat.auth.configuration;
import com.hccake.ballcat.auth.CustomTokenEnhancer; import com.hccake.ballcat.auth.CustomTokenEnhancer;
import com.hccake.ballcat.auth.OAuth2AuthorizationServerProperties; import com.hccake.ballcat.auth.OAuth2AuthorizationServerProperties;
import com.hccake.ballcat.auth.UserInfoCoordinator; import com.hccake.ballcat.auth.userdetails.SysUserDetailsServiceImpl;
import com.hccake.ballcat.auth.confogurer.CustomAuthorizationServerConfigurer; import com.hccake.ballcat.auth.userdetails.UserInfoCoordinator;
import com.hccake.ballcat.auth.configurer.CustomAuthorizationServerConfigurer;
import com.hccake.ballcat.common.redis.config.CachePropertiesHolder; import com.hccake.ballcat.common.redis.config.CachePropertiesHolder;
import com.hccake.ballcat.common.security.component.CustomRedisTokenStore; import com.hccake.ballcat.common.security.component.CustomRedisTokenStore;
import com.hccake.ballcat.common.security.constant.SecurityConstants; import com.hccake.ballcat.common.security.constant.SecurityConstants;
@@ -11,12 +12,16 @@ import com.hccake.ballcat.common.security.exception.CustomAuthenticationEntryPoi
import com.hccake.ballcat.common.security.exception.CustomWebResponseExceptionTranslator; import com.hccake.ballcat.common.security.exception.CustomWebResponseExceptionTranslator;
import com.hccake.ballcat.common.security.properties.SecurityProperties; import com.hccake.ballcat.common.security.properties.SecurityProperties;
import com.hccake.ballcat.common.security.util.PasswordUtils; import com.hccake.ballcat.common.security.util.PasswordUtils;
import com.hccake.ballcat.system.service.SysUserService;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.DependsOn; import org.springframework.context.annotation.DependsOn;
import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Import;
import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.oauth2.common.exceptions.OAuth2Exception; import org.springframework.security.oauth2.common.exceptions.OAuth2Exception;
import org.springframework.security.oauth2.provider.error.WebResponseExceptionTranslator; import org.springframework.security.oauth2.provider.error.WebResponseExceptionTranslator;
@@ -87,13 +92,34 @@ public class AuthorizationAutoConfiguration {
} }
/** /**
* 用户信息协调者 * 用户详情处理类
* @return UserInfoCoordinator
*/ */
@Bean @Configuration(proxyBeanMethods = false)
@ConditionalOnMissingBean @ConditionalOnClass(SysUserService.class)
public UserInfoCoordinator userInfoCoordinator() { @ConditionalOnMissingBean(UserDetailsService.class)
return new UserInfoCoordinator(); static class UserDetailsServiceConfiguration {
/**
* 用户详情处理类
* @return SysUserDetailsServiceImpl
*/
@Bean
@ConditionalOnMissingBean
public UserDetailsService userDetailsService(SysUserService sysUserService,
UserInfoCoordinator userInfoCoordinator) {
return new SysUserDetailsServiceImpl(sysUserService, userInfoCoordinator);
}
/**
* 用户信息协调者
* @return UserInfoCoordinator
*/
@Bean
@ConditionalOnMissingBean
public UserInfoCoordinator userInfoCoordinator() {
return new UserInfoCoordinator();
}
} }
} }

View File

@@ -1,7 +1,6 @@
package com.hccake.ballcat.auth.confogurer; package com.hccake.ballcat.auth.configurer;
import com.hccake.ballcat.auth.CustomAccessTokenConverter; import com.hccake.ballcat.auth.CustomAccessTokenConverter;
import com.hccake.ballcat.auth.SysUserDetailsServiceImpl;
import com.hccake.ballcat.auth.mobile.MobileTokenGranter; import com.hccake.ballcat.auth.mobile.MobileTokenGranter;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
@@ -10,6 +9,7 @@ import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.oauth2.config.annotation.configurers.ClientDetailsServiceConfigurer; import org.springframework.security.oauth2.config.annotation.configurers.ClientDetailsServiceConfigurer;
import org.springframework.security.oauth2.config.annotation.web.configuration.AuthorizationServerConfigurer; import org.springframework.security.oauth2.config.annotation.web.configuration.AuthorizationServerConfigurer;
import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerEndpointsConfigurer; import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerEndpointsConfigurer;
@@ -40,7 +40,7 @@ public class CustomAuthorizationServerConfigurer implements AuthorizationServerC
private final TokenStore tokenStore; private final TokenStore tokenStore;
private final SysUserDetailsServiceImpl sysUserDetailsService; private final UserDetailsService userDetailsService;
private final TokenEnhancer tokenEnhancer; private final TokenEnhancer tokenEnhancer;
@@ -82,7 +82,7 @@ public class CustomAuthorizationServerConfigurer implements AuthorizationServerC
@Override @Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception { public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
// @formatter:off // @formatter:off
endpoints.tokenStore(tokenStore).userDetailsService(sysUserDetailsService) endpoints.tokenStore(tokenStore).userDetailsService(userDetailsService)
.authenticationManager(authenticationManager) .authenticationManager(authenticationManager)
// 自定义token // 自定义token
.tokenEnhancer(tokenEnhancer) .tokenEnhancer(tokenEnhancer)

View File

@@ -1,4 +1,4 @@
package com.hccake.ballcat.auth; package com.hccake.ballcat.auth.userdetails;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import com.hccake.ballcat.common.security.constant.TokenAttributeNameConstants; import com.hccake.ballcat.common.security.constant.TokenAttributeNameConstants;
@@ -13,7 +13,6 @@ import org.springframework.security.core.authority.AuthorityUtils;
import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;
import java.util.*; import java.util.*;
@@ -23,7 +22,6 @@ import java.util.*;
* @date 2019/9/25 20:44 * @date 2019/9/25 20:44
*/ */
@Slf4j @Slf4j
@Service
@RequiredArgsConstructor @RequiredArgsConstructor
public class SysUserDetailsServiceImpl implements UserDetailsService { public class SysUserDetailsServiceImpl implements UserDetailsService {

View File

@@ -1,4 +1,4 @@
package com.hccake.ballcat.auth; package com.hccake.ballcat.auth.userdetails;
import com.hccake.ballcat.system.model.entity.SysUser; import com.hccake.ballcat.system.model.entity.SysUser;