本地化

如果你需要支持其他区域设置,本节包含了你需要了解的所有内容。spring-doc.cadn.net.cn

所有异常消息均可本地化,包括与身份验证失败和访问被拒绝(授权失败)相关的消息。 面向开发人员或系统部署人员的异常和日志消息(包括属性错误、接口契约违规、使用了不正确的构造函数、启动时验证以及调试级别日志)不会被本地化,而是以英文硬编码在 Spring Security 的代码中。spring-doc.cadn.net.cn

spring-security-core-xx.jar 中,您会找到一个 org.springframework.security 包,其中包含一个 messages.properties 文件,以及一些常用语言的本地化版本。 您的 ApplicationContext 应引用该文件,因为 Spring Security 类实现了 Spring 的 MessageSourceAware 接口,并期望在应用上下文启动时通过依赖注入获得消息解析器。 通常,您只需在应用上下文中注册一个 bean 来引用这些消息即可。 下面是一个示例:spring-doc.cadn.net.cn

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

messages.properties 文件的命名遵循标准资源包的命名规范,代表 Spring Security 消息所支持的默认语言。 该默认文件为英文。spring-doc.cadn.net.cn

如果您希望自定义 messages.properties 文件,或支持其他语言,应复制该文件并按相应规则重命名,然后在上述 bean 定义中注册它。 该文件中包含的消息键数量不多,因此本地化工作不应被视为一项重大任务。 如果您对该文件进行了本地化,请考虑通过创建一个 JIRA 任务并附上您已正确命名的 messages.properties 本地化版本,将您的成果分享给社区。spring-doc.cadn.net.cn

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 官方文档。spring-doc.cadn.net.cn

“contacts”示例应用程序已配置为使用本地化消息。spring-doc.cadn.net.cn