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”示例應用程序設置為使用本地化消息。
- 架構
- 9.技術概述
- 9.1 運行環境
- 9.2 核心組件
- 9.2.1 SecurityContextHolder, SecurityContext and Authentication Objects
- 9.2.2 The UserDetailsService
- 9.2.3 GrantedAuthority
- 9.2.4 總結
- 9.3 驗證
- 9.3.1 在Spring Security中驗證是什么
- 9.3.2 直接設置SecurityContextHolder內容
- 9.4 web應用中的驗證
- 9.4.1 ExceptionTranslationFilter
- 9.4.2 AuthenticationEntryPoint
- 9.4.3 驗證機制
- 9.4.4 在請求之間存儲SecurityContext
- 9.5 Spring Security中的訪問控制(授權)
- 9.5.1 Security and AOP Advice
- 9.5.2 Secure Objects and the AbstractSecurityInterceptor
- 什么是配置屬性
- RunAsManager
- AfterInvocationManager
- 擴展安全對象模型
- 9.6 本地化
- 10 核心服務
- 10.1 The AuthenticationManager, ProviderManager and AuthenticationProvider
- 10.1.1 成功驗證時擦除憑據
- 10.1.2 DaoAuthenticationProvider
- 10.2 UserDetailsService實現
- 10.2.1 In-Memory Authentication
- 10.2.2 JdbcDaoImpl
- Authority Groups
- 10.3 Password Encoding
- 10.3.1 密碼發展史
- 10.3.2 DelegatingPasswordEncoder
- 密碼存儲格式
- 密碼編碼
- 密碼比對
- 入門體驗
- 排除故障
- 10.3.3 BCryptPasswordEncoder
- 10.3.4 Pbkdf2PasswordEncoder
- 10.3.5 SCryptPasswordEncoder
- 10.3.6 其他PasswordEncoders
- 10.4 Jackson的支持
- 11 測試方法安全
- 12 集成spring mvc測試
- 13 webflux支持
- 14 安全過濾器鏈
- 14.1 DelegatingFilterProxy
- 14.2 FilterChainProxy
- 14.2.1 繞過過濾鏈
- 14.3 過濾器順序
- 14.4 匹配請求和http防火墻
- 14.5 與其他基于過濾器的框架一起使用
- 14.6 Advanced Namespace Configuration
- 15. 核心的安全過濾器
- 15.1 FilterSecurityInterceptor
- 15.2 ExceptionTranslationFilter
- 15.3 SecurityContextPersistenceFilter
- 15.4 UsernamePasswordAuthenticationFilter