本地化
如果你需要支持其他语言环境,本节内容包含了所有你需要了解的信息。
所有异常消息都可以本地化,包括与身份验证失败和访问被拒绝(授权失败)相关的消息。面向开发人员或系统部署人员的异常和日志记录消息(包括不正确的属性、违反接口契约、使用不正确的构造函数、启动时验证、调试级别的日志记录)则不会本地化,而是在 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" 示例应用程序已配置为使用本地化消息。