ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
Spring Security支持最终用户可能看到的异常消息的本地化。如果您的应用程序是为讲英语的用户设计的,则无需执行任何操作,因为默认情况下所有安全消息均为英语。如果您需要支持其他语言环境,则需要了解的所有内容都包含在本节中。 可以对所有异常消息进行本地化,包括与身份验证失败和访问被拒绝相关的消息(授权失败)。专注于开发人员或系统部署人员的异常和日志消息(包括错误的属性,接口合同违规,使用错误的构造函数,启动时间验证,调试级别日志记录)不是本地化的,而是在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”示例应用程序设置为使用本地化消息。