refactor(security): 异常信息使用 messages_zh_CN.properties 国际化文件处理

This commit is contained in:
冷冷 committed 2024-12-01 15:04:50 +08:00
1 parent 0a8586ef1e
commit a013b5196a
6 files changed
+23 -38

No files matched your search

@@ -7,6 +7,7 @@ import com.pig4cloud.pigx.admin.api.entity.SysOauthClientDetails;
import com.pig4cloud.pigx.admin.api.feign.RemoteClientDetailsService;
import com.pig4cloud.pigx.common.core.constant.CacheConstants;
import com.pig4cloud.pigx.common.core.constant.SecurityConstants;
import com.pig4cloud.pigx.common.core.util.MsgUtils;
import com.pig4cloud.pigx.common.core.util.RetOps;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
@@ -37,6 +38,8 @@ import java.util.Optional;
@RequiredArgsConstructor
public class PigxRemoteRegisteredClientRepository implements RegisteredClientRepository {
private final static String NOTFOUND_CLIENT_ERROR_CODE = "RegisteredClient.notFound";
/**
* 刷新令牌有效期默认 30 天
*/
@@ -104,7 +107,7 @@ public class PigxRemoteRegisteredClientRepository implements RegisteredClientRep
.of(clientDetailsService.getClientDetailsById(clientId))
.getData()
.orElseThrow(() -> new OAuth2AuthorizationCodeRequestAuthenticationException(
new OAuth2Error("客户端查询异常,请检查数据库链接"), null));
new OAuth2Error(MsgUtils.getSecurityMessage(NOTFOUND_CLIENT_ERROR_CODE)), null));
clientDetails = fetchedClientDetails;
Optional.ofNullable(cache).ifPresent(c -> c.put(clientId, fetchedClientDetails));
@@ -24,6 +24,7 @@ import com.pig4cloud.pigx.common.core.constant.CacheConstants;
import com.pig4cloud.pigx.common.core.constant.CommonConstants;
import com.pig4cloud.pigx.common.core.constant.SecurityConstants;
import com.pig4cloud.pigx.common.core.constant.enums.UserTypeEnum;
import com.pig4cloud.pigx.common.core.util.MsgUtils;
import com.pig4cloud.pigx.common.core.util.R;
import com.pig4cloud.pigx.common.core.util.RetOps;
import com.pig4cloud.pigx.common.core.util.WebUtils;
@@ -51,6 +52,7 @@ import java.util.*;
@RequiredArgsConstructor
public class PigxTocDefaultUserDetailsServiceImpl implements PigxUserDetailsService {
private final CacheManager cacheManager;
private final Optional<RemoteAppUserService> remoteAppUserServiceOptional;
@@ -84,10 +86,10 @@ public class PigxTocDefaultUserDetailsServiceImpl implements PigxUserDetailsServ
UserDetails getUserDetailsAppUser(R<AppUserInfo> result) {
// @formatter:off
return RetOps.of(result)
.assertSuccess(r -> new OAuth2AuthenticationException(new OAuth2Error(OAuth2ErrorCodes.SERVER_ERROR, "用户名或密码错误",null)))
.assertSuccess(r -> new OAuth2AuthenticationException(new OAuth2Error(OAuth2ErrorCodes.SERVER_ERROR, MsgUtils.getSecurityMessage(NOTFOUND_USER_ERROR_CODE),null)))
.getData()
.map(this::convertUserDetailsAppUser)
.orElseThrow(() -> new UsernameNotFoundException("用户不存在"));
.orElseThrow(() -> new UsernameNotFoundException(MsgUtils.getSecurityMessage(NOTFOUND_USER_ERROR_CODE)));
// @formatter:on
}
@@ -23,6 +23,7 @@ import com.pig4cloud.pigx.app.api.feign.RemoteAppUserService;
import com.pig4cloud.pigx.common.core.constant.CommonConstants;
import com.pig4cloud.pigx.common.core.constant.SecurityConstants;
import com.pig4cloud.pigx.common.core.constant.enums.UserTypeEnum;
import com.pig4cloud.pigx.common.core.util.MsgUtils;
import com.pig4cloud.pigx.common.core.util.R;
import com.pig4cloud.pigx.common.core.util.RetOps;
import com.pig4cloud.pigx.common.core.util.WebUtils;
@@ -39,6 +40,8 @@ import org.springframework.security.oauth2.core.OAuth2ErrorCodes;
import java.util.*;
import static com.pig4cloud.pigx.common.security.service.PigxTocDefaultUserDetailsServiceImpl.NOTFOUND_USER_ERROR_CODE;
/**
* 用户详细信息
*
@@ -74,10 +77,10 @@ public class PigxTocMobileUserDetailsServiceImpl implements PigxUserDetailsServi
UserDetails getUserDetailsAppUser(R<AppUserInfo> result) {
// @formatter:off
return RetOps.of(result)
.assertSuccess(r -> new OAuth2AuthenticationException(new OAuth2Error(OAuth2ErrorCodes.SERVER_ERROR, "用户信息获取失败",null)))
.assertSuccess(r -> new OAuth2AuthenticationException(new OAuth2Error(OAuth2ErrorCodes.SERVER_ERROR,MsgUtils.getSecurityMessage(NOTFOUND_USER_ERROR_CODE),null)))
.getData()
.map(this::convertUserDetailsAppUser)
.orElseThrow(() -> new UsernameNotFoundException("用户不存在"));
.orElseThrow(() -> new UsernameNotFoundException(MsgUtils.getSecurityMessage(NOTFOUND_USER_ERROR_CODE)));
// @formatter:on
}
@@ -22,6 +22,7 @@ import com.pig4cloud.pigx.admin.api.entity.SysUser;
import com.pig4cloud.pigx.common.core.constant.CommonConstants;
import com.pig4cloud.pigx.common.core.constant.SecurityConstants;
import com.pig4cloud.pigx.common.core.constant.enums.UserTypeEnum;
import com.pig4cloud.pigx.common.core.util.MsgUtils;
import org.springframework.core.Ordered;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.AuthorityUtils;
@@ -37,6 +38,12 @@ import java.util.*;
*/
public interface PigxUserDetailsService extends UserDetailsService, Ordered {
/**
* Notfound 用户错误代码
*/
String NOTFOUND_USER_ERROR_CODE = "UserDetailsService.notFound";
/**
* 是否支持此客户端校验
*
@@ -67,7 +74,7 @@ public interface PigxUserDetailsService extends UserDetailsService, Ordered {
// @formatter:off
return userInfoOptional
.map(this::convertUserDetails)
.orElseThrow(() -> new UsernameNotFoundException("用户不存在"));
.orElseThrow(() -> new UsernameNotFoundException(MsgUtils.getSecurityMessage(NOTFOUND_USER_ERROR_CODE)));
// @formatter:on
}
@@ -1,32 +0,0 @@
package com.pig4cloud.pigx.common.security.util;
import org.springframework.context.support.MessageSourceAccessor;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
import java.util.Locale;
/**
* @author lengleng
* @date 2020/9/4
* <p>
* @see org.springframework.security.core.SpringSecurityMessageSource pigx 框架自身异常处理,
* 建议所有异常都使用此工具类型 避免无法复写 SpringSecurityMessageSource
*/
public class PigxSecurityMessageSourceUtil extends ReloadableResourceBundleMessageSource {
// ~ Constructors
// ===================================================================================================
public PigxSecurityMessageSourceUtil() {
setBasename("classpath:messages/messages");
setDefaultLocale(Locale.CHINA);
}
// ~ Methods
// ========================================================================================================
public static MessageSourceAccessor getAccessor() {
return new MessageSourceAccessor(new PigxSecurityMessageSourceUtil());
}
}
@@ -54,6 +54,8 @@ DigestAuthenticationFilter.nonceNotTwoTokens=Nonce\u5E94\u8BE5\u7531\u4E24\u90E8
DigestAuthenticationFilter.usernameNotFound=\u7528\u6237\u540D{0}\u672A\u627E\u5230
JdbcDaoImpl.noAuthority=\u6CA1\u6709\u4E3A\u7528\u6237{0}\u6307\u5B9A\u89D2\u8272
JdbcDaoImpl.notFound=\u672A\u627E\u5230\u7528\u6237{0}
UserDetailsService.notFound=\u7528\u6237\u4E0D\u5B58\u5728
RegisteredClient.notFound=\u5BA2\u6237\u7AEF\u4FE1\u606F\u67E5\u8BE2\u5931\u8D25
LdapAuthenticationProvider.badCredentials=\u574F\u7684\u51ED\u8BC1
LdapAuthenticationProvider.credentialsExpired=\u7528\u6237\u51ED\u8BC1\u5DF2\u8FC7\u671F
LdapAuthenticationProvider.disabled=\u7528\u6237\u672A\u6FC0\u6D3B