From c3d55c3fe23fbb943209ba18fae923cb815058dc Mon Sep 17 00:00:00 2001 From: lbw Date: Thu, 28 Apr 2022 13:43:04 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20Introducing=20new=20features.=20#3?= =?UTF-8?q?860=20=E8=B5=84=E6=BA=90=E6=9C=8D=E5=8A=A1=E5=99=A8=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C=E4=BB=A4=E7=89=8C=E6=94=AF=E6=8C=81=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E5=90=8E=E5=8D=B3=E6=97=B6=E7=94=9F=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PigxLocalResourceServerTokenServices.java | 13 +++++++++++++ ... => PigxSecurityCommonAutoConfiguration.java} | 16 +++++++++++++--- .../src/main/resources/META-INF/spring.factories | 2 +- 3 files changed, 27 insertions(+), 4 deletions(-) rename pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/component/{PigxTokenStoreAutoConfiguration.java => PigxSecurityCommonAutoConfiguration.java} (79%) diff --git a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/component/PigxLocalResourceServerTokenServices.java b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/component/PigxLocalResourceServerTokenServices.java index 1744a6c43..cd69341de 100644 --- a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/component/PigxLocalResourceServerTokenServices.java +++ b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/component/PigxLocalResourceServerTokenServices.java @@ -4,14 +4,17 @@ import com.pig4cloud.pigx.common.core.util.SpringContextHolder; import com.pig4cloud.pigx.common.security.exception.UnauthorizedException; import com.pig4cloud.pigx.common.security.service.PigxUser; import com.pig4cloud.pigx.common.security.service.PigxUserDetailsService; +import com.pig4cloud.pigx.common.security.util.PigxSecurityMessageSourceUtil; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Primary; import org.springframework.core.Ordered; +import org.springframework.security.authentication.AccountStatusException; import org.springframework.security.authentication.InternalAuthenticationServiceException; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.Authentication; import org.springframework.security.core.AuthenticationException; import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsChecker; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.security.oauth2.common.OAuth2AccessToken; import org.springframework.security.oauth2.common.exceptions.InvalidTokenException; @@ -36,6 +39,8 @@ public class PigxLocalResourceServerTokenServices implements ResourceServerToken private final TokenStore tokenStore; + private final UserDetailsChecker preAuthenticationChecks; + @Override public OAuth2Authentication loadAuthentication(String accessToken) throws AuthenticationException, InvalidTokenException { @@ -68,11 +73,19 @@ public class PigxLocalResourceServerTokenServices implements ResourceServerToken UserDetails userDetails; try { userDetails = optional.get().loadUserByUser(pigUser); + + preAuthenticationChecks.check(userDetails); } catch (UsernameNotFoundException notFoundException) { throw new UnauthorizedException(String.format("%s username not found", pigUser.getUsername()), notFoundException); } + catch (AccountStatusException accountStatusException) { + throw new UnauthorizedException( + PigxSecurityMessageSourceUtil.getAccessor().getMessage( + "AbstractUserDetailsAuthenticationProvider.locked", accountStatusException.getMessage()), + accountStatusException); + } Authentication userAuthentication = new UsernamePasswordAuthenticationToken(userDetails, "N/A", userDetails.getAuthorities()); OAuth2Authentication authentication = new OAuth2Authentication(oAuth2Request, userAuthentication); diff --git a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/component/PigxTokenStoreAutoConfiguration.java b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/component/PigxSecurityCommonAutoConfiguration.java similarity index 79% rename from pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/component/PigxTokenStoreAutoConfiguration.java rename to pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/component/PigxSecurityCommonAutoConfiguration.java index bcdec8128..d44f78133 100644 --- a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/component/PigxTokenStoreAutoConfiguration.java +++ b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/component/PigxSecurityCommonAutoConfiguration.java @@ -7,19 +7,20 @@ import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.security.core.userdetails.UserDetailsChecker; import org.springframework.security.oauth2.provider.OAuth2Authentication; import org.springframework.security.oauth2.provider.token.DefaultAuthenticationKeyGenerator; import org.springframework.security.oauth2.provider.token.TokenStore; /** * @author lengleng - * @date 2020/9/29 + * @date 2022-04-28 *

- * redis token store 自动配置 + * 资源服务器 认证服务器 公用配置 */ @RequiredArgsConstructor @Configuration(proxyBeanMethods = false) -public class PigxTokenStoreAutoConfiguration { +public class PigxSecurityCommonAutoConfiguration { private final KeyStrResolver resolver; @@ -39,4 +40,13 @@ public class PigxTokenStoreAutoConfiguration { return tokenStore; } + /** + * 认证状态检查 + * @return UserDetailsChecker + */ + @Bean + public UserDetailsChecker preAuthenticationChecks() { + return new PigxPreAuthenticationChecks(); + } + } diff --git a/pigx-common/pigx-common-security/src/main/resources/META-INF/spring.factories b/pigx-common/pigx-common-security/src/main/resources/META-INF/spring.factories index 4bc46e709..9d9a8eda7 100644 --- a/pigx-common/pigx-common-security/src/main/resources/META-INF/spring.factories +++ b/pigx-common/pigx-common-security/src/main/resources/META-INF/spring.factories @@ -4,7 +4,7 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.pig4cloud.pigx.common.security.service.PigxDefaultUserDetailsServiceImpl,\ com.pig4cloud.pigx.common.security.service.PigxAppUserDetailsServiceImpl,\ com.pig4cloud.pigx.common.security.service.PigxClientDetailsServiceImpl,\ - com.pig4cloud.pigx.common.security.component.PigxTokenStoreAutoConfiguration,\ + com.pig4cloud.pigx.common.security.component.PigxSecurityCommonAutoConfiguration,\ com.pig4cloud.pigx.common.security.component.PigxSecurityMessageSourceConfiguration,\ com.pig4cloud.pigx.common.security.component.PigxTokenStoreCleanSchedule,\ com.pig4cloud.pigx.common.security.listener.AuthenticationFailureEventListener,\