Spring Security 国际化 让人蛋疼的 坏的凭证

简介: 错误信息报出一个“坏的凭证”,根本就让人看不懂。 还是看英文的好。 Spring Security支持异常信息的国际化,最终用户希望看到这些信息。

错误信息报出一个“坏的凭证”,根本就让人看不懂。

还是看英文的好。

Spring Security支持异常信息的国际化,最终用户希望看到这些信息。 如果你的应用被设计成给讲英语的用户的,你不需要做任何事情, 因为默认情况下Spring Security的信息都是引用的。 

所有的异常信息都支持国际化,包括验证失败和访问被拒绝的相关信息(授权失败)。 应该被开发者和系统开发者关注(包括不正确的属性,接口契约,使用非法构造方法, 开始时间校验,调试级日志等等)的异常和日志没有被国际化,而是使用英语硬编码到 Spring Security的代码中。 

找到国际化文件 
从spring-security-core-xx.jar中,你可以找到 org.springframework.security包下,包含了一些 messages.properties文件,我们找到 

messages_zh_CN.properties 并拷贝到 resources 目录下 

配置国际化文件 
这应该引用到你的 ApplicationContext中,因为Spring Security的类 都实现了spring的MessageSourceAware接口, 期待的信息处理器会在application context启动的时候注入进来。 通常所有你需要做的就是在你的application context中注册一个bean来引用这些信息。 

在 application context 中配置 

<bean id="messageSource" 
class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> 
<property name="basename" value="classpath:messages"/> 
</bean> 

messages.properties是按照标准资源束命名的, 里边包括了Spring security所使用的默认语言的信息。 默认的文件是英文的。如果你没有注册一个信息源,Spring Security也会正常工作, 并使用硬编码的英文版本的信息。 

修改相应国际化文件 

...........badCredentials=\u574f\u7684\u51ed\u8bc1 

默认的badCredentials翻译为 "坏的凭证" 我们将其修改为 "账号或密码不正确" 

替换所有的 \u574f\u7684\u51ed\u8bc1为 \u8d26\u53f7\u6216\u5bc6\u7801\u4e0d\u6b63\u786e



再附上英对中的翻译,不过说真的,还不如看英文原版


Spring Security 国际化文件 messages_zh_CN.properties 中文解释
Spring Security 国际化文件 messages_zh_CN.properties 中文解释 

AbstractAccessDecisionManager.accessDenied = 不允许访问 
AbstractSecurityInterceptor.authenticationNotFound = 未在SecurityContext中查找到认证对象 
AbstractUserDetailsAuthenticationProvider.badCredentials = 坏的凭证 
AbstractUserDetailsAuthenticationProvider.credentialsExpired = 用户凭证已过期 
AbstractUserDetailsAuthenticationProvider.disabled = 用户已失效 
AbstractUserDetailsAuthenticationProvider.expired = 用户帐号已过期 
AbstractUserDetailsAuthenticationProvider.locked = 用户帐号已被锁定 
AbstractUserDetailsAuthenticationProvider.onlySupports = 仅仅支持UsernamePasswordAuthenticationToken 
AnonymousAuthenticationProvider.incorrectKey = 展示的AnonymousAuthenticationToken不含有预期的key 
AuthByAdapterProvider.incorrectKey = 展示的AuthByAdapter实现不含有预期的key 
BasicAclEntryAfterInvocationProvider.insufficientPermission = Authentication对象({0})确实含有ACL权限,但并不是目标领域对象所要求的({1}) 
BasicAclEntryAfterInvocationProvider.noPermission = 给定的Authentication对象({0})根本无权操控领域对象({1}) 
BindAuthenticator.badCredentials = 坏的凭证 
BindAuthenticator.failedToLoadAttributes = 坏的凭证 
CasAuthenticationProvider.incorrectKey = 展示的CasAuthenticationToken不含有预期的key 
CasAuthenticationProvider.noServiceTicket = 未能够正确提供待验证的CAS服务票根 
ConcurrentSessionControllerImpl.exceededAllowed = 已经超过了当前主体({0})被允许的最大会话数量 
DaoX509AuthoritiesPopulator.noMatching = 未在subjectDN: {0}中找到匹配的模式 
DefaultIntitalDirContextFactory.badCredentials = 坏的凭证 
DefaultIntitalDirContextFactory.communicationFailure = 不能够连接到LDAP服务器 
DefaultIntitalDirContextFactory.unexpectedException = 由于未预期异常而不能够获得InitialDirContext 
DigestProcessingFilter.incorrectRealm = 响应结果中的Realm名字({0})同系统指定的Realm名字({1})不吻合 
DigestProcessingFilter.incorrectResponse = 错误的响应结果 
DigestProcessingFilter.missingAuth = 遗漏了针对'auth' QOP的、必须给定的摘要取值; 接收到的头信息为{0} 
DigestProcessingFilter.missingMandatory = 遗漏了必须给定的摘要取值; 接收到的头信息为{0} 
DigestProcessingFilter.nonceCompromised = Nonce令牌已经存在问题了,{0} 
DigestProcessingFilter.nonceEncoding = Nonce未经过Base64编码; 相应的nonce取值为 {0} 
DigestProcessingFilter.nonceExpired = Nonce已经过期/超时 
DigestProcessingFilter.nonceNotNumeric = Nonce令牌的第1部分应该是数字,但结果却是{0} 
DigestProcessingFilter.nonceNotTwoTokens = Nonce应该由两部分取值构成,但结果却是{0} 
DigestProcessingFilter.usernameNotFound = 用户名{0}未找到 
JdbcDaoImpl.noAuthority = 没有为用户{0}指定角色 
JdbcDaoImpl.notFound = 未找到用户{0} 
LdapAuthenticationProvider.emptyPassword = 坏的凭证 
LdapAuthenticationProvider.emptyUsername = 用户名不允许为空 
NamedCasProxyDecider.untrusted = 代理({0})不受信任 
PasswordComparisonAuthenticator.badCredentials = 坏的凭证 
ProviderManager.providerNotFound = 未查找到针对{0}的AuthenticationProvider 
RejectProxyTickets.reject = Proxy票根被拒绝 
RememberMeAuthenticationProvider.incorrectKey = 展示RememberMeAuthenticationToken不含有预期的key 
RunAsImplAuthenticationProvider.incorrectKey = 展示的RunAsUserToken不含有预期的key 
SwitchUserProcessingFilter.credentialsExpired = 用户凭证已过期 
SwitchUserProcessingFilter.disabled = 用户已失效 
SwitchUserProcessingFilter.expired = 用户帐号已过期 
SwitchUserProcessingFilter.locked = 用户帐号已被锁定 
SwitchUserProcessingFilter.noCurrentUser = 不存在当前用户 
SwitchUserProcessingFilter.noOriginalAuthentication = 不能够查找到原先的已认证对象 
SwitchUserProcessingFilter.usernameNotFound = 用户名{0}未找到 
UserDetailsService.credentialsExpired = 用户凭证已过期 
UserDetailsService.disabled = 用户已失效 
UserDetailsService.expired = 用户帐号已过期 
UserDetailsService.locked = 用户帐号已被锁定 
X509AuthenticationProvider.certificateNull = 未提供证书 

目录
相关文章
|
4月前
|
安全 Java 数据安全/隐私保护
使用Spring Security实现细粒度的权限控制
使用Spring Security实现细粒度的权限控制
|
4月前
|
安全 Java 数据库
实现基于Spring Security的权限管理系统
实现基于Spring Security的权限管理系统
|
4月前
|
安全 Java 数据安全/隐私保护
解析Spring Security中的权限控制策略
解析Spring Security中的权限控制策略
|
5月前
|
Java 数据安全/隐私保护 网络架构
一个简单的示例在spring boot中实现国际化
一个简单的示例在spring boot中实现国际化
|
3月前
|
Java Spring 自然语言处理
Spring 框架里竟藏着神秘魔法?国际化与本地化的奇妙之旅等你来揭开谜底!
【8月更文挑战第31天】在软件开发中,国际化(I18N)与本地化(L10N)对于满足不同地区用户需求至关重要。Spring框架提供了强大支持,利用资源文件和`MessageSource`实现多语言文本管理。通过配置日期格式和货币符号,进一步完善本地化功能。合理应用这些特性,可显著提升应用的多地区适应性和用户体验。
40 0
|
5月前
|
JSON 安全 Java
Spring Security 6.x 微信公众平台OAuth2授权实战
上一篇介绍了OAuth2协议的基本原理,以及Spring Security框架中自带的OAuth2客户端GitHub的实现细节,本篇以微信公众号网页授权登录为目的,介绍如何在原框架基础上定制开发OAuth2客户端。
199 4
Spring Security 6.x 微信公众平台OAuth2授权实战
|
5月前
|
存储 安全 Java
Spring Security 6.x OAuth2登录认证源码分析
上一篇介绍了Spring Security框架中身份认证的架构设计,本篇就OAuth2客户端登录认证的实现源码做一些分析。
223 2
Spring Security 6.x OAuth2登录认证源码分析
|
5月前
|
安全 Java 数据安全/隐私保护
Spring Security 6.x 一文快速搞懂配置原理
本文主要对整个Spring Security配置过程做一定的剖析,希望可以对学习Spring Sercurity框架的同学所有帮助。
248 5
Spring Security 6.x 一文快速搞懂配置原理
|
5月前
|
安全 Java API
Spring Security 6.x 图解身份认证的架构设计
【6月更文挑战第1天】本文主要介绍了Spring Security在身份认证方面的架构设计,以及主要业务流程,及核心代码的实现
82 1
Spring Security 6.x 图解身份认证的架构设计
|
4月前
|
安全 Java 数据安全/隐私保护
使用Spring Security实现细粒度的权限控制
使用Spring Security实现细粒度的权限控制