|
对于最新的稳定版本,请使用 Spring Security 7.0.4! |
本地化
如果你需要支持其他区域设置,本节包含你需要了解的所有内容。
所有异常消息,包括与身份验证失败和访问被拒绝(授权失败)相关的消息,都可以进行本地化。 面向开发人员或系统部署人员的异常和日志消息(包括属性错误、接口契约违规、使用了不正确的构造函数、启动时验证以及调试级别日志)则不会进行本地化,而是以英文硬编码在 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 的本地化(localization)支持来实际查找相应的消息。
要使其正常工作,您必须确保将来自传入请求的区域设置(locale)存储在 Spring 的 org.springframework.context.i18n.LocaleContextHolder 中。
Spring MVC 的 DispatcherServlet 会为您的应用程序自动完成此操作。然而,由于 Spring Security 的过滤器在此之前被调用,因此需要在调用这些过滤器之前,将 LocaleContextHolder 设置为包含正确的 Locale。
您可以在自己的过滤器中完成此操作(该过滤器必须在 web.xml 中位于 Spring Security 过滤器之前),或者也可以使用 Spring 提供的 RequestContextFilter。
有关在 Spring 中使用本地化的更多详细信息,请参阅 Spring Framework 文档。
contacts 示例应用程序已配置为使用本地化消息。