41. The Security Namespace
41.1Web Application Security網路應用安全
41.1.1<debug>
啟用spring安全除錯基礎架構。這將提供人類可讀的(多行)除錯資訊來監控進入安全過濾器的請求。這可能包括敏感資訊,例如請求引數或頭,並且應該只在開發環境中使用。
41.1.2<http>
如果在應用程式中使用< http >元素,將建立一個名為“springSecurityFilterChain”的過濾器鏈代理FilterChainProxy
bean,並且使用元素中的配置在過濾器鏈代理FilterChainProxy中構建過濾器鏈。從Spring Security 3.1開始,可以使用額外的http元素來新增額外的過濾器鏈[22]。一些核心過濾器總是在過濾器鏈中建立,其他的將根據屬性和存在的子元素新增到堆疊中。標準過濾器的位置是固定的(參見名稱空間介紹中的過濾器順序表),當用戶必須在FilterChainProxy bean中顯式配置過濾器鏈時,消除了以前版本框架的常見錯誤源。當然,如果您需要完全控制配置,您仍然可以這樣做。
所有需要引用身份驗證管理器的篩選器AuthenticationManager都將自動注入由名稱空間配置建立的內部例項(有關身份驗證管理器AuthenticationManager的更多資訊,請參見介紹章節)。
每個< http >名稱空間塊總是建立一個SecurityContextPersistenceFilter、一個ExceptionTranslationFilter和一個FilterSecurityInterceptor。這些都是固定的,不能用替代品代替。
<http> Attributes
< http >元素上的屬性控制著核心過濾器的一些屬性。
access-decision-manager-ref:可選屬性,指定應用於授權超文字傳輸協議請求的訪問決策管理器AccessDecisionManager實現的標識。預設情況下,基於確認AffirmativeBased的實現用於角色投票者RoleVoter
authentication-manager-ref:對此http元素建立的篩選器鏈FilterChain使用的身份驗證管理器AuthenticationManager
的引用。
auto-config:自動註冊登入表單、BASIC身份驗證、登出服務。如果設定為“真”,將新增所有這些功能(儘管您仍然可以通過提供相應的元素來自定義每個功能的配置)。如果未指定,預設為“假”。不建議使用此屬性。請改用顯式配置元素,以避免混淆。
create-session:控制spring安全類建立一個超文字傳輸協議會話。選項包括:
always
如果不存在會話,Spring Security將主動建立會話。ifRequired
僅當需要會話時,Spring Security才會建立一個會話(預設值)。never
Spring Security永遠不會建立會話,但是如果應用程式建立了會話,它會使用會話。stateless
Spring Security不會建立會話並忽略獲取Spring身份驗證的會話。
disable-url-rewriting:防止會話標識被附加到應用程式中的網址。如果此屬性設定為true,客戶端必須使用cookies。預設值為真。
entry-point-ref:通常使用的身份驗證輸入點AuthenticationEntryPoint
將根據已配置的身份驗證機制進行設定。此屬性允許通過定義將啟動身份驗證過程的自定義身份驗證入口點AuthenticationEntryPoint
bean來覆蓋此行為。
jaas-api-provision:如果可用,將請求作為從JaasAuthenticationToken獲取的主題執行,這是通過向堆疊中新增JaasApiIntegrationFilter bean來實現的。預設為false。
name:一個bean識別符號,用於引用上下文中其他地方的bean。
once-per-request:對應於篩選器安全性FilterSecurityInterceptor介面的observeOncePerRequest屬性。預設為真。
pattern:為http元素定義一個模式控制著將通過它定義的過濾器列表過濾的請求。解釋取決於配置的請求匹配器。如果沒有定義模式,所有的請求都將被匹配,所以最具體的模式應該首先宣告。
realm:設定用於基本身份驗證的領域名稱(如果啟用)。對應於基本身份驗證輸入點BasicAuthenticationEntryPoint上的realmName屬性。
request-matcher :定義在FilterChainProxy中使用的RequestMatcher策略和由攔截url建立的beans,以匹配傳入的請求。目前的選項有mvc、ant、regex和ciRegex,分別針對Spring MVC、ant、正則表示式和不區分大小寫的正則表示式。使用模式、方法和servlet路徑屬性為每個攔截url元素建立一個單獨的例項。螞蟻路徑使用螞蟻路徑請求匹配器進行匹配,正則表示式使用正則表示式請求匹配器進行匹配,而對於Spring MVC路徑匹配,則使用MvcRequestMatcher。請參見這些類的Javadoc,瞭解關於匹配是如何執行的更多細節。螞蟻路徑是預設策略。
request-matcher-ref:對實現請求匹配器RequestMatcher
的bean的引用,該請求匹配器將確定是否應該使用該篩選器鏈FilterChain
。這是模式的更強有力的替代。
security:通過將此屬性設定為none,請求模式可以對映到空的篩選器鏈。將不會應用任何安全性,也不會提供任何Spring Security的功能。
security-context-repository-ref:允許將自定義的SecurityContextRepository注入到SecurityContextPersistenceFilter中。
servlet-api-provision:提供不同版本的HttpServletRequest安全方法,如isUserInRole()和getPrincipal(),這些方法是通過向堆疊中新增一個SecurityContextHolderAreRequestFilter bean來實現的。預設為真。
use-expressions:在訪問屬性中啟用EL表示式,如基於表示式的訪問控制一章所述。預設值為真。
Child Elements of <http>
- access-denied-handler
- anonymous
- cors
- csrf
- custom-filter
- expression-handler
- form-login
- headers
- http-basic
- intercept-url
- jee
- logout
- openid-login
- port-mappings
- remember-me
- request-cache
- session-management
- x509
41.1.3<access-denied-handler>
此元素允許您使用錯誤頁errorPage
屬性為ExceptionTranslationFilter使用的預設訪問拒絕處理程式AccessDeniedHandler
設定錯誤頁屬性,或者使用該屬性提供您自己的實現。這將在異常轉換過濾器一節中詳細討論。
<access-denied-handler> Attributes
error-page:如果經過身份驗證的使用者請求一個他們無權訪問的頁面,則該使用者將被重定向到的拒絕訪問頁面。
ref:定義對AccessDeniedHandler型別的Spring bean的引用。
41.1.4<cors>
這個元素允許配置一個CorsFilter。如果沒有指定CorsFilter或CorsConfigurationSource,並且Spring MVC在類路徑中,那麼將使用一個HandlerMappingIntrospector胸針作為CorsConfigurationSource。
<cors> Attributes
< cors >元素上的屬性控制headers元素。
ref:指定CorsFilter的bean名稱的可選屬性。
cors-configuration-source-ref:可選屬性,指定要注入到由XML名稱空間建立的CorsFilter中的CorsConfigurationSource的bean名稱。
41.1.5<headers>
這個元素允許配置附加的(安全的)頭和響應一起傳送。它使幾個標題的配置變得容易,並且允許通過標題元素設定自定義標題。其他資訊,請參見參考資料的安全標題部分。
Cache-Control
,Pragma
, andExpires:
可以使用cache-control元素進行設定。這可以確保瀏覽器不會快取您的安全頁面。
Strict-Transport-Security:可以使用hsts元素設定嚴格-傳輸-安全性。這確保了瀏覽器自動請求HTTPS用於將來的請求。
X-Frame-Options:可以使用frame-options元素進行設定。框架選項標題X-Frame-Options header可用於防止點選劫持攻擊。
X-XSS-Protection:可以使用xss-protection元素進行設定。瀏覽器可以使用X-XSS保護頭進行基本控制。
X-Content-Type-Options:可以使用內容型別選項content-type-options元素進行設定。“內容型別選項”標題X-Content-Type-Options header阻止了網際網路資源管理器從宣告的內容型別中嗅探響應。這也適用於谷歌瀏覽器,當下載擴充套件時。
Public-Key-Pinning or Public-Key-Pinning-Report-Only:可以使用hpkp元素進行設定。這使得HTTPS網站能夠抵制攻擊者使用錯誤頒發的或其他欺詐性的證書進行假冒。
Content-Security-Policy or Content-Security-Policy-Report-Only:可以使用內容安全策略content-security-policy元素進行設定。內容安全策略(CSP)是一種機制,網路應用程式可以利用它來減輕內容注入漏洞,如跨站點指令碼(XSS)。
Referrer-Policy:可以使用referrer-policy元素進行設定,referrer-Policy是一種web應用程式可以用來管理Referrer欄位的機制,該欄位包含使用者所在的最後一頁。
<headers> Attributes
<headers>元素上的屬性控制標題元素。
defaults-disabled:可選屬性,指定禁用預設的Spring Security的HTTP響應頭。預設值為false(包含預設標題)。
disabled:可選屬性,指定禁用spring安全的超文字傳輸協議響應頭。預設值為false(啟用標題)。
Child Elements of <headers>
- cache-control
- content-security-policy
- content-type-options
- frame-options
- header
- hpkp
- hsts
- referrer-policy
- xss-protection
41.1.6<cache-control>
新增Cache-Control
,Pragma
, andExpires
,以確保瀏覽器不會快取您的安全頁面。
<cache-control> Attributes
disabled:指定是否應禁用快取控制。預設值為false。
41.1.7<hsts>
啟用後,會將嚴格傳輸安全標頭Strict-Transport-Security新增到任何安全請求的響應中。這允許伺服器指示瀏覽器在將來的請求中自動使用HTTPS。
<hsts> Attributes
disabled:指定是否應禁用嚴格傳輸安全性Strict-Transport-Security。預設值為false。
include-sub-domains:指定是否應包含子域。預設為真。
max-age-seconds:指定主機被視為已知HSTS主機的最長時間。預設一年。
request-matcher-ref:用於確定是否應該設定標頭的請求匹配器例項。如果HttpServletRequest.isSecure()為真,則為預設值。
41.1.8<hpkp>
啟用後,會將用於HTTP頭的公鑰鎖定擴充套件新增到任何安全請求的響應中。這使得HTTPS網站能夠抵制攻擊者使用錯誤頒發的或其他欺詐性的證書進行假冒。
<hpkp> Attributes
- disabled指定是否應禁用超文字傳輸協議公鑰鎖定(HPKP)。預設為真。
- include-sub-domains指定是否應該包含子域。預設值為false。
- max-age-seconds設定公鑰密碼頭的最大年齡指令值。預設60天。
- report-only指定瀏覽器是否應僅報告引腳驗證失敗。預設為真。
- report-uri指定瀏覽器應該向其報告pin驗證失敗的URI。
41.1.9<pins>
引腳列表
Child Elements of <pins>
41.1.10<pin>
使用base64編碼的SPKI指紋作為值,使用加密雜湊演算法作為屬性來指定pin
<pin> Attributes
- algorithm加密雜湊演算法。預設值為SHA256。
41.1.11<content-security-policy>
啟用時,將內容安全策略(CSP)頭新增到響應中。CSP是一種機制,網路應用程式可以利用它來減輕內容注入漏洞,如跨站點指令碼(XSS)。
<content-security-policy> Attributes
- policy-directives內容安全策略Content-Security-Policy標題的安全策略指令,或者如果僅報告report-only設定為真,則使用內容安全策略僅報告Content-Security-Policy-Report-Only標題。
- report-only設定為true,啟用內容安全策略僅報告Content-Security-Policy-Report-Only標題,僅報告策略違規。預設為false。
41.1.12<referrer-policy>
啟用時,將引用者策略Referrer Policy標頭新增到響應中。
<referrer-policy> Attributes
- policy推薦人的策略-策略Referrer-Policy標題。預設為“no-referrer”。
41.1.13<frame-options>
啟用時,會在響應中新增X-Frame-Options標頭,這允許較新的瀏覽器進行一些安全檢查,並防止點選劫持攻擊。
<frame-options> Attributes
- disabled如果禁用,將不會包括X-Frame-Options標題。預設值為false。
-
policy
DENY
頁面不能顯示在框架中,無論站點是否嘗試這樣做。當指定框架選項策略時,這是預設設定。SAMEORIGIN
頁面只能顯示在與頁面本身原點相同的框架中。ALLOW-FROM原點頁面只能顯示在指定原點的框架中。
換句話說,如果您指定DENY,從其他站點載入時,不僅在框架中載入頁面的嘗試會失敗,從同一站點載入時,這樣做的嘗試也會失敗。另一方面,如果您指定SAMEORIGIN,您仍然可以在框架中使用該頁面,只要包含它的站點與提供該頁面的站點相同。
-
strategy選擇使用“AllowFromStrategy”策略時要使用的ALLOW-FROM策略。
static
使用一個靜態的ALLOW-FROM值。該值可以通過value屬性來設定。regexp
使用正則表示式來驗證傳入的請求以及它們是否被允許。正則表示式可以通過value屬性來設定。可以使用from-parameter指定用於檢索要驗證的值的請求引數。whitelist包含允許的域的逗號分隔列表。逗號分隔列表可以通過value屬性來設定。可以使用from-parameter數指定用於檢索要驗證的值的請求引數。
- ref除了使用預定義的策略之外,還可以使用自定義的AllowFromStrategy。這個bean的引用可以通過這個ref屬性來指定。
- value當ALLOW-FROM用作strategy時使用的值。
- from-parameter為ALLOW-FROM策略使用正則表示式或白名單時,指定要使用的請求引數的名稱。
41.1.14<xss-protection>
將X-XSS-Protection標頭新增到響應中,以幫助防止reflected / Type-1 Cross-Site Scripting (XSS)攻擊。這絕不是對XSS襲擊的全面保護!
<xss-protection> Attributes
xss-protection-disabled 不要包括反射/型別1跨站點指令碼(XSS)保護的標題。
xss-protection-enabled明確啟用或禁用反射/型別1跨站點指令碼(XSS)保護。
xss-protection-block當為真且xss-protection-enabled為真時,將mode=block新增到標頭。這向瀏覽器指示根本不應該載入頁面。當false且xss-protection-enabled為true時,當檢測到反射攻擊時,頁面仍將呈現,但響應將被修改以防止攻擊。請注意,有時有辦法繞過這種模式,這往往會使阻止頁面更可取。
41.1.15<content-type-options>
向響應中新增值為nosniff的“X-Content-Type-Options”標題。這將禁用IE8+和Chrome擴充套件的MIME嗅探。
<content-type-options> Attributes
- disabled指定是否應禁用內容型別選項Content Type Options。預設值為false。
41.1.16<header>
向響應中新增額外的標頭,名稱和值都需要指定。
<header-attributes> Attributes
- header-name標頭名。
- value標頭值。
- ref.對
HeaderWriter
介面的自定義實現的引用。
41.1.17<anonymous>
向堆疊中新增匿名使用者身份驗證過濾器AnonymousAuthenticationFilter和匿名使用者身份驗證提供程式AnonymousAuthenticationProvider。如果您使用的是“身份驗證匿名IS_AUTHENTICATED_ANONYMOUSLY”屬性,則需要此項。
anonymous> Attributes
- enabled使用預設名稱空間設定,匿名“身份驗證”功能將自動啟用。您可以使用此屬性將其禁用。
- granted-authority應該分配給匿名請求的授權。通常,這用於為匿名請求分配特定的角色,這些角色隨後可以在授權決策中使用。如果未設定,預設為ROLE_ANONYMOUS。
- key提供程式和篩選器之間共享的金鑰。這通常不需要設定。如果未設定,它將預設為安全隨機生成的值。這意味著設定該值可以在使用匿名功能時縮短啟動時間,因為生成安全隨機值可能需要一段時間。
- username應該分配給匿名請求的使用者名稱。這允許識別主體,這對於日誌記錄和審計可能是重要的。如果未設定,預設為匿名使用者。
41.1.18<csrf>
該元素將為應用程式新增跨站點請求偽造(CSRF)保護。它還更新了預設的請求快取,以便在身份驗證成功後僅重放“獲取”請求。更多資訊可在參考資料的“跨站點偽造請求(CSRF)”部分找到。
<csrf> Attributes
disabled可選屬性,指定禁用春季安全的CSRF保護。預設值為假(啟用CSRF保護)。強烈建議啟用CSRF保護。
token-repository-ref要使用的CsrfTokenRepository。預設為HttpSessionCsrfTokenRepository。
request-matcher-ref 用於確定是否應該應用CSRF的請求匹配器例項。預設為除"GET", "TRACE", "HEAD", "OPTIONS"之外的任何超文字傳輸協議方法。
41.1.19<custom-filter>
此元素用於向過濾器鏈新增過濾器。它不建立任何額外的bean,而是用於選擇已經在應用程式上下文中定義的javax.servlet.Filter型別的bean,並將其新增到Spring Security維護的篩選器鏈中的特定位置。完整的細節可以在名稱空間章節中找到。
<custom-filter> Attributes
- after緊接其後的過濾器,自定義過濾器應放置在鏈中。只有希望將自己的過濾器混合到安全過濾器鏈中並且對標準的Spring安全過濾器有一定了解的高階使用者才需要該功能。過濾器名稱對映到特定的Spring安全性實現過濾器。
- before緊接在自定義過濾器之前的過濾器應放置在鏈中
- position自定義篩選器應放在鏈中的明確位置。如果要更換標準過濾器,請使用。
- ref對實現過濾器的Spring bean的引用。
41.1.20<expression-handler>
定義在啟用基於表示式的訪問控制時將使用的安全表示式處理程式例項。如果不提供,將使用預設實現(不支援ACL)。
Parent Elements of <expression-handler>
<expression-handler> Attributes
- ref定義對實現c
SecurityExpressionHandler
的Spring bean的引用。
41.1.21<form-login>
用於將使用者名稱密碼身份驗證過濾器UsernamePasswordAuthenticationFilter
新增到過濾器堆疊,並將登入身份驗證入口點LoginUrlAuthenticationEntryPoint新增到應用程式上下文,以按需提供身份驗證。這將始終優先於其他名稱空間建立的入口點。如果未提供屬性,將在網址“//login”處自動生成登入頁面。可以使用<form-login>
屬性自定義行為。
- always-use-default-target如果設定為true,使用者將總是從預設的目標urldefault-target-url給定的值開始,不管他們是如何到達登入頁面的。對映到usernamepassworauthenticationfilter的alwaysUseDefaultTargetUrl屬性。預設值為false。
- authentication-details-source-ref對身份驗證篩選器將使用的身份驗證詳細資訊資源的引用。
- authentication-failure-handler-ref可以作為身份驗證失敗urlauthentication-failure-url的替代,讓您在身份驗證失敗後完全控制導航流。該值應該是應用程式上下文中的身份驗證失敗處理程式
AuthenticationFailureHandler
bean的名稱。
- authentication-failure-url對映到使用者名稱密碼身份驗證篩選器UsernamePasswordAuthenticationFilter的身份驗證失敗Url
authenticationFailureUrl
屬性。定義登入失敗時瀏覽器將被重定向到的網址。預設為/login?error,將由自動登入頁面生成器自動處理,用錯誤訊息重新呈現登入頁面。
- authentication-success-handler-ref這可以作為預設目標urldefault-target-url和始終使用預設目標always-use-default-target的替代方案,讓您在成功驗證後完全控制導航流。該值應該是應用程式上下文中身份驗證成功處理程式
AuthenticationSuccessHandler
bean的名稱。預設情況下,會使用SaveDrequestAwarAuThEnticationSuccessHandler的實現,並注入預設的目標urldefault-target-url。
- default-target-url對映到UserNamePassWordAuthenticationFilter的defaultTargetUrl屬性。如果未設定,預設值為“/”(應用程式根目錄)。如果使用者在嘗試訪問受保護的資源時沒有被要求登入,他們將在登入後被帶到此網址,此時他們將被帶到最初請求的網址。
- login-page應該用來呈現登入頁面的網址。對映到登入身份驗證入口點LoginUrlAuthenticationEntryPoint的登入身份驗證
loginFormUrl
屬性。預設為“/login”。
- login-processing-urlw3對映到usernamepassworauthenticationfilter的filterProcessesUrl屬性。預設值為“/login”。
- password-parameter包含密碼的請求引數的名稱。預設為“password”。
- username-parameter使用者名稱引數包含使用者名稱的請求引數的名稱。預設為“username”。
- authentication-success-forward-url將轉發身份驗證成功處理程式
ForwardAuthenticationSuccessHandler
對映到使用者名稱密碼身份驗證篩選器UsernamePasswordAuthenticationFilter的身份驗證成功處理程式authenticationSuccessHandler
屬性。
- authentication-failure-forward-url身份驗證失敗轉發url將轉發身份驗證失敗處理程式
ForwardAuthenticationFailureHandler
對映到使用者名稱密碼身份驗證篩選器UsernamePasswordAuthenticationFilter的身份驗證失敗處理程式authenticationFailureHandler
屬性。
41.1.22<http-basic>
向配置中新增基本身份驗證篩選器BasicAuthenticationFilter
和基本身份驗證輸入點BasicAuthenticationEntryPoint
。後者僅在未啟用基於表單的登入時用作配置入口點。
<http-basic> Attributes
- authentication-details-source-ref對身份驗證篩選器
AuthenticationDetailsSource
將使用的身份驗證詳細資訊資源的引用
- entry-point-ref設定基本身份驗證篩選器BasicAuthenticationFilter使用的身份驗證輸入點AuthenticationEntryPoint。
41.1.23<http-firewall> Element
這是一個頂級元素,可用於將HttpFirewall的自定義實現注入到由名稱空間建立的篩選器鏈代理FilterChainProxy
中。預設實現應該適用於大多數應用程式。
<http-firewall> Attributes
- ref定義對實現HttpFirewall的Spring bean的引用。
41.1.24<intercept-url>
這個元素用於定義應用程式感興趣的一組網址模式,並配置如何處理它們。它用於構造過濾器安全性介面FilterSecurityInterceptor使用的過濾器呼叫安全性資料來源FilterInvocationSecurityMetadataSource
。例如,如果HTTPS需要訪問特定的網址,它還負責配置一個通道處理過濾器ChannelProcessingFilter
。將指定的模式與傳入的請求進行匹配時,匹配是按照元素宣告的順序進行的。因此,最具體的模式應該放在第一位,最一般的模式應該放在最後。
Parent Elements of <intercept-url>
<intercept-url> Attributes
- access列出將儲存在已定義的網址模式/方法組合URL pattern/method combination的篩選器呼叫安全性資料來源
FilterInvocationSecurityMetadataSource
中的訪問屬性。這應該是安全配置屬性(如角色名稱)的逗號分隔列表。
- filters只能取值“none”。這將導致任何匹配請求完全繞過Spring Security篩選器鏈。< http >配置的其餘部分都不會對請求產生任何影響,並且在其持續時間內也沒有可用的安全上下文。請求期間對安全方法的訪問將會失敗。
- method該方法將與模式和servlet路徑(可選)結合使用,以匹配傳入的請求。如果省略,任何方法都將匹配。如果在有和沒有方法的情況下指定了相同的模式,則方法特定的匹配將優先。
- pattern定義網址路徑的模式。內容將取決於包含http元素的請求匹配器屬性,因此將預設為ant路徑語法。
- request-matcher-ref對請求匹配器的引用,用於確定是否使用了該<intercept-url >。
- requires-channel可以是“http”或“https”,這取決於特定的URL模式應該分別通過HTTP還是HTTPS來訪問。或者,當沒有偏好時,可以使用值“any”。如果這個屬性出現在任何< intercept-url >元素上,那麼ChannelProcessingFilter將被新增到過濾器堆疊中,並且它的附加依賴項將被新增到應用程式上下文中。
如果添加了<port-mappings>配置,則安全通道處理器SecureChannelProcessor
和安全通道處理器InsecureChannelProcessor
beans將使用該配置來確定用於重定向到HTTP/HTTPS的埠。
- servlet-pathservlet路徑,它將與模式和HTTP方法結合使用,以匹配傳入的請求。此屬性僅在請求匹配器為“mvc”時適用。此外,該值僅在以下兩種使用情況下是必需的:1)在ServletContext中註冊了兩個或多個HttpServlet,它們具有以“/”開頭的不同對映;2)該模式以註冊的HttpServlet路徑的相同值開始,不包括預設的(根)Httpservlet“/”。
41.1.25<jee>
將J2ee PreauthenticatedProcessingFilter新增到篩選器鏈,以提供與容器身份驗證的整合。
<jee> Attributes
- mappable-roles要在傳入的HttpServletRequest中查詢的以逗號分隔的角色列表。
- user-service-ref對使用者服務user-service(或使用者詳細資訊服務UserDetailsServicebean)標識的引用
41.1.26<logout>
將登入篩選器LogoutFilter
新增到篩選器堆疊。這是用SecurityContextLogoutHandler配置的。
<logout> Attributes
- delete-cookies 用戶登出時應刪除的cookies名稱的逗號分隔列表。
- invalidate-session對映到SecurityContextLogoutHandler的失效主題
invalidateHttpSession
。預設為“真”,因此會話將在登出時失效。
-
logout-success-url
使用者登出後將被帶到的目標網址。預設為 <form-login-login-page>/?logout (i.e. /login?logout)。設定此屬性將使用配置了屬性值的SimpleRedirectionValidSessionStrategy注入會話管理篩選器SessionManagementFilter
。當提交無效的會話標識時,將呼叫策略,重定向到配置的網址。
- logout-url將導致登出的網址(即由過濾器處理的網址)。預設為“/logout".
- success-handler-ref可用於提供登入成功處理程式
LogoutSuccessHandler
的例項,該例項將在登出後被呼叫來控制導航。
41.1.27<openid-login>
類似於<form-login>,具有相同的屬性。登入處理urllogin-processing-url的預設值是“/login/openid”。將註冊一個開放身份驗證過濾器OpenIDAuthenticationFilter
和開放身份驗證提供程式OpenIDAuthenticationProvider
。後者需要對使用者詳細資訊服務UserDetailsService的引用。同樣,這可以使用user-service-ref屬性由id指定,也可以在應用程式上下文中自動定位。
<openid-login> Attributes
- always-use-default-target使用者是否應該在登入後總是被重定向到預設的目標urldefault-target-url。
- authentication-details-source-ref對身份驗證篩選器將使用的身份驗證詳細資訊資源的引用
- authentication-failure-handler-ref對應用於處理失敗的身份驗證請求的身份驗證失敗處理程式AuthenticationFailureHandlerbean的引用。不應與身份驗證失敗ur authentication-failure-urll結合使用,因為實現應該始終處理到後續目的地的導航
- authentication-failure-url登入失敗頁面的網址。如果未指定登入失敗網址,Spring Security將在/login自動建立一個失敗登入網址/login?login_error和一個相應的過濾器,用於在請求時呈現登入失敗的網址。
- authentication-success-forward-url將轉發身份驗證成功處理程式
ForwardAuthenticationSuccessHandler
對映到使用者名稱密碼身份驗證篩選器UsernamePasswordAuthenticationFilter的身份驗證成功處理程式authenticationSuccessHandler
屬性。
- authentication-failure-forward-url將轉發身份驗證失敗處理程式
ForwardAuthenticationFailureHandler
對映到使用者名稱密碼身份驗證篩選器UsernamePasswordAuthenticationFilter的身份驗證失敗處理程式authenticationFailureHandler
屬性。
- authentication-success-handler-ref對身份驗證成功處理程式bean的引用,該bean應用於處理成功的身份驗證請求。不應與預設目標url(或始終使用預設目標)結合使用,因為實現應始終處理到後續目的地的導航。
- default-target-url如果使用者以前的操作無法恢復,則在成功身份驗證後將重定向到的網址。如果使用者訪問登入頁面時沒有首先請求觸發身份驗證的安全操作,通常會發生這種情況。如果未指定,預設為應用程式的根目錄。
- login-page登入頁面的網址。如果未指定登入網址,Spring Security將在/login自動建立一個登入網址,並在請求時建立一個相應的過濾器來呈現該登入網址。
- login-processing-url登入表單釋出到的網址。如果未指定,預設為/login。
- password-parameter包含密碼的請求引數的名稱。預設為“密碼”。
- user-service-ref對使用者服務(或使用者詳細資訊服務UserDetailsServicebean)標識的引用
- username-parameter包含使用者名稱的請求引數的名稱。預設為“username”。
Child Elements of <openid-login>
41.1.28<attribute-exchange>
屬性交換attribute-exchang元素定義了應該向身份提供者請求的屬性列表。一個例子可以在名稱空間配置一章的OpenID支援部分找到。可以使用多個,在這種情況下,每個都必須有一個識別符號匹配identifier-match
屬性,包含一個正則表示式,該表示式與提供的OpenID識別符號相匹配。這允許從不同的提供商(谷歌、雅虎等)獲取不同的屬性列表。
<attribute-exchange> Attributes
- identifier-match一個正則表示式,當決定在身份驗證期間使用哪個屬性交換配置時,將與宣告的身份進行比較。
Child Elements of <attribute-exchange>
41.1.29<openid-attribute>
發出開放獲取請求(OpenID AX Fetch Request)時使用的屬性
<openid-attribute> Attributes
- count指定希望返回的屬性數量。例如,回覆3封電子郵件。預設值為1。
- name指定要返回的屬性的名稱。例如,電子郵件。
- required指定操作是否需要該屬性,但如果操作不返回該屬性,則不會出錯。預設值為false。
- type 指定屬性型別。例如,https://axschema.org/contact/email.請參閱您的作業系統文件,瞭解有效的屬性型別。
41.1.30<port-mappings>
預設情況下,PortMapperImpl的一個例項將被新增到配置中,用於重定向到安全和不安全的URL。這個元素可以選擇性地用來覆蓋該類定義的預設對映。每個子<port-mapping>元素定義了一對HTTP:HTTPS埠。預設對映是80:443和8080:8443。在名稱空間介紹中可以找到一個覆蓋這些的例子。
Child Elements of <port-mappings>
41.1.31<port-mapping>
提供一種在強制重定向時將http埠對映到https埠的方法。
<port-mapping> Attributes
- http要使用的http埠。
- https要使用的https埠。
41.1.32<remember-me>
將RememberMeAuthenticationFilter新增到堆疊中。這又將根據屬性設定配置令牌基成員身份服務TokenBasedRememberMeServices、持久令牌基成員身份服務PersistentTokenBasedRememberMeServices
或實現成員身份服務RememberMeServices的使用者指定user-specified bean。
<remember-me> Attributes
- authentication-success-handler-ref如果需要自定義導航,請在RememberMeAuthenticationFilter上設定身份驗證成功處理程式authenticationSuccessHandler屬性。該值應該是應用程式上下文中身份驗證成功處理程式AuthenticationSuccessHandlerbean的名稱。
- data-source-ref對資料來源DataSourcebean的引用。如果設定了此選項,PersistentTokenBasedRememberMeServices將使用並配置一個JdbcTokenRepositoryImpl例項。
- remember-me-parameter切換記憶身份驗證的請求引數的名稱。預設為"remember-me"。對映到抽象成員服務AbstractRememberMeServices的“parameter”屬性。
- remember-me-cookie儲存用於“記住我”身份驗證的令牌的cookie的名稱。預設為“remember-me”。對映到抽象成員服務AbstractRememberMeServices的“cookieName”屬性。
- key對映到抽象成員服務的“鍵”屬性。應設定為唯一值,以確保“記住我”cookies僅在一個應用程式中有效[24]。如果沒有設定,將生成一個安全的隨機值。由於生成安全隨機值可能需要一段時間,因此顯式設定該值有助於在使用“記住我”功能時縮短啟動時間。
- services-alias將內部定義的RememberMeServices匯出為bean別名,允許它被應用程式上下文中的其他bean使用。
- services-ref允許完全控制將由過濾器使用的RememberMeServices實現。該值應該是實現該介面的應用程式上下文中bean的id。如果正在使用登出過濾器,還應該實現LogoutHandler。
- token-repository-ref配置PersistentTokenBasedRememberMeServices,但允許使用自定義的PersistentTokenRepository bean。
- token-validity-seconds 對映到抽象成員服務AbstractRememberMeServices的令牌有效性秒tokenValiditySeconds屬性。指定“記住我”cookie的有效期(以秒為單位)。預設情況下,有效期為14天。
- use-secure-cookie建議僅在HTTPS提交“記住我”cookies,因此應標記為“安全”。預設情況下,如果發出登入請求的連線是安全的(應該如此),將使用安全cookie。如果將此屬性設定為false,將不會使用安全cookies。將其設定為true將始終在cookie上設定安全標誌。此屬性對映到抽象成員服務AbstractRememberMeServices的useSecureCookie屬性。
- user-service-ref記住我的服務實現需要訪問使用者詳細資訊服務UserDetailsService,所以必須在應用程式上下文中定義一個。如果只有一個,它將由名稱空間配置自動選擇和使用。如果有多個例項,可以使用該屬性顯式指定bean id。
41.1.33<request-cache> Element
設定請求快取RequestCache例項,在呼叫身份驗證輸入點AuthenticationEntryPoint之前,該例項將被異常轉換篩選器ExceptionTranslationFilter用來儲存請求資訊。
<request-cache> Attributes
- ref定義了對請求快取RequestCache的Spring bean的引用。
41.1.34<session-management>
與會話管理相關的功能通過向過濾器堆疊新增會話管理過濾器SessionManagementFilter
來實現。
<session-management> Attributes
- invalid-session-url 設定此屬性將使用用屬性值配置的簡單重定向無效會話策略SimpleRedirectInvalidSessionStrategy來注入會話管理篩選器SessionManagementFilter。當提交無效的會話標識時,將呼叫策略,重定向到配置的網址。
- invalid-session-url允許注入會話管理過濾器SessionManagementFilter使用的InvalidSessionStrategy例項。請使用此屬性或無效會話url屬性,但不能同時使用這兩個屬性。
- session-authentication-error-url定義當會話身份驗證策略SessionAuthenticationStrategy引發異常時應顯示的錯誤頁面的網址。如果未設定,將向客戶端返回未經授權的(401)錯誤程式碼。請注意,如果在基於表單的登入過程中出現錯誤,則此屬性不適用,在這種情況下,身份驗證失敗的網址將優先。
- session-authentication-strategy-ref允許注入會話管理篩選器使用的會話身份驗證策略例項
-
session-fixation-protection為“無”,將不會應用任何保護。“新會話”將建立一個新的空會話,只遷移與Spring Security相關的屬性。“遷移會話”將建立一個新會話,並將所有會話屬性複製到新會話。在Servlet 3.1 (Java EE 7)和更新的容器中,指定“changeSessionId”將保留現有會話,並使用容器提供的會話固定保護(HttpserVletrequest # ChangeSessionid())。在Servlet 3.1和更新的容器中預設為“changeSessionId”,在舊容器中預設為“migrateSession”。如果舊容器中使用了“changeSessionId”,將引發異常。 如果啟用了會話固定保護,將向會話管理過濾器注入適當配置的預設會話身份驗證策略。有關更多詳細資訊,請參見該類的Javadoc。
Child Elements of <session-management>
41.1.35<concurrency-control>
增加對併發會話控制的支援,允許對使用者可以擁有的活動會話數量進行限制。將建立一個併發會話過濾器ConcurrentSessionFilter,併發會話控制身份驗證策略ConcurrentSessionControlAuthenticationStrategy將與會話管理過濾器SessionManagementFilter一起使用。如果已經聲明瞭表單登入元素,那麼策略物件也將被注入到建立的身份驗證過濾器中。將建立一個會話註冊SessionRegistry例項(除非使用者希望使用自定義bean,否則為會話註冊例項),供策略使用。
<concurrency-control> Attributes
- error-if-maximum-exceeded如果設定為“真”,當用戶試圖超過最大允許會話數時,將引發會話身份驗證異常SessionAuthenticationException。預設行為是終止原始會話。
- expired-url 如果使用者試圖使用已被併發會話控制器“過期”的會話,將被重定向到的網址,因為使用者已超過允許的會話數,並已在其他地方再次登入。應該設定,除非設定了“如果超過最大值則異常”。如果沒有提供值,一個到期訊息將直接寫回響應。
- expired-url允許注入併發會話過濾器使用的ExpiredSessionStrategy例項
- max-sessions對映到ConcurrentSessionContracuthenticationStrategy的maximumSessions屬性。將-1指定為支援無限制會話的值。
- session-registry-alias在您自己的beans或管理介面中引用內部會話登錄檔也很有用。您可以使用session-registry-alias屬性公開內部bean,給它一個可以在配置的其他地方使用的名稱。
- session-registry-ref使用者可以使用session-registry-ref屬性提供他們自己的會話登錄檔SessionRegistry實現。其他併發會話控制beans將被連線起來使用它。
41.1.36<x509>
增加了對X.509身份驗證的支援。將向堆疊中新增一個X509身份驗證過濾器X509AuthenticationFilter
,並建立一個Http403ForbiddenEntryPoint bean。後者僅在沒有使用其他身份驗證機制的情況下使用(它唯一的功能是返回一個HTTP 403錯誤程式碼)。還將建立一個預身份驗證身份驗證提供程式PreAuthenticatedAuthenticationProvider
,它將使用者許可權的載入委託給使用者詳細資訊服務UserDetailsService裝置。
<x509> Attributes
- authentication-details-source-ref
對身份驗證詳細資訊資源AuthenticationDetailsSource的引用
- subject-principal-regex定義一個正則表示式,用於從證書中提取使用者名稱(供使用者詳細資訊服務使用)。
- user-service-ref在配置了多個例項的情況下,允許特定的使用者詳細資訊服務與X.509一起使用。如果未設定,將嘗試自動定位合適的例項並使用它。
41.1.37<filter-chain-map>
用於使用過濾器鏈對映顯式配置過濾器鏈代理例項
<filter-chain-map> Attributes
- request-matcher定義用於匹配傳入請求的策略。目前,選項有“ant”(用於ant路徑模式)、“regex”(用於正則表示式)和“ciRegex”(用於不區分大小寫的正則表示式)。
Child Elements of <filter-chain-map>
41.1.38<filter-chain>
用於定義特定的網址模式和適用於匹配該模式的網址的過濾器列表。當為了配置過濾器鏈代理而將多個過濾器鏈元素組合在一個列表中時,最具體的模式必須放在列表的頂部,最一般的模式放在底部。
<filter-chain> Attributes
- filters對實現過濾器的Spring beans的引用的逗號分隔列表。值“none”表示不應對此篩選器鏈FilterChain使用任何篩選器。
- patternA結合請求匹配器建立請求匹配器的模式
- request-matcher-ref對請求匹配器的引用,用於確定是否應呼叫過濾器屬性中的任何過濾器。
41.1.39<filter-security-metadata-source>
用於顯式配置與篩選器安全性介面FilterSecurityInterceptor一起使用的篩選器安全性資料來源FilterSecurityMetadataSourcebean。通常只有在顯式配置過濾器鏈代理FilterChainProxy時才需要,而不是使用< http >元素。使用的攔截url元素應該只包含模式、方法和訪問屬性。任何其他操作都將導致配置錯誤。
<filter-security-metadata-source> Attributes
- id一個bean識別符號,用於引用上下文中其他地方的bean。
- request-matcher定義用於匹配傳入請求的策略。目前,選項有“ant”(用於ant路徑模式)、“regex”(用於正則表示式)和“ciRegex”(用於不區分大小寫的正則表示式)。
- use-expressions允許在<intercept-url >元素的“access”屬性中使用表示式,而不是傳統的配置屬性列表。預設為“true”。如果啟用,每個屬性應該包含一個布林表示式。如果表示式計算結果為“true”,將授予訪問許可權。