本地化
如果您需要支持其他语言环境,本节包含了您需要了解的所有信息。
所有异常消息都可以本地化,包括与身份验证失败和访问被拒绝(授权失败)相关的消息。针对开发人员或系统部署人员的异常和日志消息(包括不正确的属性、接口契约违规、使用不正确的构造函数、启动时验证、调试级日志记录)不会本地化,而是硬编码为英文在 Spring Security 的代码中。
在 spring-security-core-xx.jar
中,您会找到一个 org.springframework.security
包,该包又包含一个 messages.properties
文件,以及一些常用语言的本地化版本。您的 ApplicationContext
应该引用它,因为 Spring Security 类实现了 Spring 的 MessageSourceAware
接口,并期望消息解析器在应用程序上下文启动时进行依赖注入。通常,您只需在应用程序上下文中注册一个 bean 来引用这些消息即可。下面显示了一个示例
<bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basename" value="classpath:org/springframework/security/messages"/>
</bean>
messages.properties
的命名符合标准资源束,并表示 Spring Security 消息支持的默认语言。此默认文件为英文。
如果您希望自定义 messages.properties
文件或支持其他语言,则应复制该文件,根据需要重命名,并在上述 bean 定义中注册它。此文件中没有大量的消息键,因此本地化不应被视为一项主要工作。如果您确实执行了此文件的本地化,请考虑通过记录 JIRA 任务并附加您相应命名本地化版本的 messages.properties
与社区共享您的工作。
Spring Security 依靠 Spring 的本地化支持才能实际查找相应的消息。为了使此功能正常工作,您必须确保来自传入请求的语言环境存储在 Spring 的 org.springframework.context.i18n.LocaleContextHolder
中。Spring MVC 的 DispatcherServlet
会自动为您的应用程序执行此操作,但由于 Spring Security 的过滤器在此之前被调用,因此在调用过滤器之前,需要将 LocaleContextHolder
设置为包含正确的 Locale
。您可以在过滤器中自己执行此操作(必须在 web.xml
中的 Spring Security 过滤器之前),也可以使用 Spring 的 RequestContextFilter
。有关在 Spring 中使用本地化的更多详细信息,请参阅 Spring Framework 文档。
"contacts" 示例应用程序已设置为使用本地化消息。