diff --git a/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/config/AuthorizationServerConfig.java b/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/config/AuthorizationServerConfig.java index f4d04a963..efd29d31e 100644 --- a/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/config/AuthorizationServerConfig.java +++ b/pigx-auth/src/main/java/com/pig4cloud/pigx/auth/config/AuthorizationServerConfig.java @@ -20,9 +20,11 @@ package com.pig4cloud.pigx.auth.config; import cn.hutool.core.util.StrUtil; +import com.fasterxml.jackson.databind.ObjectMapper; import com.pig4cloud.pigx.auth.service.PigxRedisTokenStore; import com.pig4cloud.pigx.common.core.constant.SecurityConstants; import com.pig4cloud.pigx.common.data.tenant.TenantContextHolder; +import com.pig4cloud.pigx.common.security.component.PigxCommenceAuthExceptionEntryPoint; import com.pig4cloud.pigx.common.security.component.PigxWebResponseExceptionTranslator; import lombok.AllArgsConstructor; import lombok.SneakyThrows; @@ -62,6 +64,8 @@ public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdap private final TokenEnhancer pigxTokenEnhancer; + private final ObjectMapper objectMapper; + @Override @SneakyThrows public void configure(ClientDetailsServiceConfigurer clients) { @@ -70,7 +74,9 @@ public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdap @Override public void configure(AuthorizationServerSecurityConfigurer oauthServer) { - oauthServer.allowFormAuthenticationForClients().checkTokenAccess("isAuthenticated()"); + oauthServer.allowFormAuthenticationForClients() + .authenticationEntryPoint(new PigxCommenceAuthExceptionEntryPoint(objectMapper)) + .checkTokenAccess("isAuthenticated()"); } @Override diff --git a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/component/ResourceAuthExceptionEntryPoint.java b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/component/PigxCommenceAuthExceptionEntryPoint.java similarity index 77% rename from pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/component/ResourceAuthExceptionEntryPoint.java rename to pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/component/PigxCommenceAuthExceptionEntryPoint.java index 2dc4de309..1df0f67d5 100644 --- a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/component/ResourceAuthExceptionEntryPoint.java +++ b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/component/PigxCommenceAuthExceptionEntryPoint.java @@ -21,14 +21,15 @@ import cn.hutool.http.HttpStatus; import com.fasterxml.jackson.databind.ObjectMapper; import com.pig4cloud.pigx.common.core.constant.CommonConstants; import com.pig4cloud.pigx.common.core.util.R; +import com.pig4cloud.pigx.common.security.util.PigxSecurityMessageSourceUtil; import lombok.AllArgsConstructor; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.springframework.http.MediaType; +import org.springframework.security.authentication.BadCredentialsException; import org.springframework.security.authentication.CredentialsExpiredException; import org.springframework.security.authentication.InsufficientAuthenticationException; import org.springframework.security.core.AuthenticationException; -import org.springframework.security.core.SpringSecurityMessageSource; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.security.web.AuthenticationEntryPoint; import org.springframework.stereotype.Component; @@ -36,10 +37,9 @@ import org.springframework.stereotype.Component; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.PrintWriter; -import java.util.Locale; /** - * 客户端异常处理 {@link org.springframework.security.core.AuthenticationException } 不同细化异常处理 + * 异常处理 {@link org.springframework.security.core.AuthenticationException } 不同细化异常处理 * * @author lengleng * @date 2020-06-14 @@ -47,7 +47,7 @@ import java.util.Locale; @Slf4j @Component @AllArgsConstructor -public class ResourceAuthExceptionEntryPoint implements AuthenticationEntryPoint { +public class PigxCommenceAuthExceptionEntryPoint implements AuthenticationEntryPoint { private final ObjectMapper objectMapper; @@ -64,16 +64,20 @@ public class ResourceAuthExceptionEntryPoint implements AuthenticationEntryPoint if (authException instanceof CredentialsExpiredException || authException instanceof InsufficientAuthenticationException) { - String msg = SpringSecurityMessageSource.getAccessor().getMessage( - "AbstractUserDetailsAuthenticationProvider.credentialsExpired", authException.getMessage(), - Locale.CHINA); + String msg = PigxSecurityMessageSourceUtil.getAccessor().getMessage( + "AbstractUserDetailsAuthenticationProvider.credentialsExpired", authException.getMessage()); result.setMsg(msg); } if (authException instanceof UsernameNotFoundException) { - String msg = SpringSecurityMessageSource.getAccessor().getMessage( - "AbstractUserDetailsAuthenticationProvider.noopBindAccount", authException.getMessage(), - Locale.CHINA); + String msg = PigxSecurityMessageSourceUtil.getAccessor().getMessage( + "AbstractUserDetailsAuthenticationProvider.noopBindAccount", authException.getMessage()); + result.setMsg(msg); + } + + if (authException instanceof BadCredentialsException) { + String msg = PigxSecurityMessageSourceUtil.getAccessor().getMessage( + "AbstractUserDetailsAuthenticationProvider.badClientCredentials", authException.getMessage()); result.setMsg(msg); }