本地化

如果您需要支援其他地區設定,本節包含您需要知道的所有資訊。

所有例外訊息,包括與身份驗證失敗和拒絕存取(授權失敗)相關的訊息,都可以本地化。專注於開發人員或系統部署人員的例外和記錄訊息(包括不正確的屬性、介面合約違規、使用不正確的建構子、啟動時間驗證、除錯層級記錄)不會本地化,而是在 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 範例應用程式已設定為使用本地化訊息。