本地化
本站(springdoc.cn)中的内容来源于 spring.io ,原始版权归属于 spring.io。由 springdoc.cn 进行翻译,整理。可供个人学习、研究,未经许可,不得进行任何转载、商用或与之相关的行为。 商标声明:Spring 是 Pivotal Software, Inc. 在美国以及其他国家的商标。 |
Spring Security支持对终端用户可能看到的异常信息进行本地化。如果你的应用程序是为讲英语的用户设计的,你不需要做任何事情,因为默认情况下所有的安全消息都是英文的。如果你需要支持其他地区,你需要知道的一切都包含在本节中。
所有的异常信息都可以被本地化,包括与认证失败和访问被拒绝(授权失败)有关的信息。针对开发者或系统部署者的异常和日志信息(包括不正确的属性、违反接口约定、使用不正确的构造函数、启动时验证、debug级日志)不被本地化,就直接在 Spring Security 的代码中用英/中文硬编码。
在 spring-security-core-xx.jar
中,你会发现一个 org.springframework.security
包,它又包含一个 messages.properties
文件,以及一些常用语言的本地化版本。你的 ApplicationContext
应该参考这个文件,因为 Spring Security 类实现了 Spring 的 MessageSourceAware
接口,并期望 message 解析器(resolver)在 application context 启动时被依赖注入。通常,你需要做的就是在你的 application context 注册一个 Bean 来引用这些message。下面是一个例子。
<bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basename" value="classpath:org/springframework/security/messages"/>
</bean>
messages.properties
是按照标准资源包(resource bundle)命名的,代表了 Spring Security 消息所支持的默认语言。这个默认文件是英文。
如果你想定制 messages.properties
文件,或支持其他语言,你应该复制该文件,并相应地重命名,然后在上述 bean 定义中注册。这个文件里面没有大量的消息key,所以本地化不应该被认为是一个重大举措。如果你对这个文件进行了本地化,请考虑与社区分享你的工作,记录一个JIRA任务,并附上你适当命名的 messages.properties
的本地化版本。
Spring Security 依赖于 Spring 的本地化支持,以便实际查找适当的消息。为了使其发挥作用,你必须确保来自传入请求的 locale 被存储在 Spring 的 org.springframework.context.i18n.LocaleContextHolder
中。Spring MVC 的 DispatcherServlet
会自动为你的应用程序做到这一点,但由于 Spring Security 的过滤器在这之前被调用,所以在过滤器被调用之前 LocaleContextHolder
需要被设置为包含正确的 Locale
。你可以自己在过滤器中完成这项工作(在 web.xml
中必须在 Spring Security 的过滤器之前),也可以使用 Spring 的 RequestContextFilter
。请参考Spring框架文档,了解关于使用Spring本地化的进一步细节。
"contacts" 示例应用程序被设置为使用本地化的信息。