網頁應用程式安全性
<http>
如果您在應用程式中使用 <http>
元素,則會建立名為 "springSecurityFilterChain" 的 FilterChainProxy
bean,並且元素內的組態設定會用於在 FilterChainProxy
內建置過濾器鏈。從 Spring Security 3.1 開始,可以使用額外的 http
元素來新增額外的過濾器鏈 [1] 關於如何設定從您的 web.xml
的映射 ]。某些核心過濾器始終在過濾器鏈中建立,而其他過濾器將根據存在的屬性和子元素新增到堆疊中。標準過濾器的位置是固定的(請參閱命名空間簡介中的過濾器順序表),消除了框架先前版本中常見的錯誤來源,當時使用者必須在 FilterChainProxy
bean 中明確組態設定過濾器鏈。當然,如果您需要完全控制組態設定,仍然可以這樣做。
所有需要參考AuthenticationManager
的過濾器都將自動注入由命名空間組態設定建立的內部實例。
每個 <http>
命名空間區塊始終建立 SecurityContextPersistenceFilter
、ExceptionTranslationFilter
和 FilterSecurityInterceptor
。這些是固定的,不能用替代方案替換。
<http> 屬性
<http>
元素上的屬性控制核心過濾器上的某些屬性。
-
access-decision-manager-ref 可選屬性,指定應該用於授權 HTTP 請求的
AccessDecisionManager
實作的 ID。預設情況下,AffirmativeBased
實作與RoleVoter
和AuthenticatedVoter
一起使用。
-
authentication-manager-ref 參考用於由此 http 元素建立的
FilterChain
的AuthenticationManager
。
-
observation-registry-ref 參考用於
FilterChain
和相關組件的ObservationRegistry
-
auto-config 自動註冊登入表單、BASIC 身份驗證、登出服務。如果設定為 "true",則會新增所有這些功能(儘管您仍然可以透過提供各自的元素來自訂每個功能的組態設定)。如果未指定,則預設為 "false"。不建議使用此屬性。請改用明確的組態設定元素,以避免混淆。
-
create-session 控制 Spring Security 類別建立 HTTP session 的積極程度。選項包括
-
always
- 如果 session 不存在,Spring Security 將主動建立 session。 -
ifRequired
- 僅當需要 session 時,Spring Security 才會建立 session(預設值)。 -
never
- Spring Security 永遠不會建立 session,但如果應用程式這樣做,將會使用 session。 -
stateless
- Spring Security 將不會建立 session,並忽略 session 以取得 SpringAuthentication
。
-
-
disable-url-rewriting 防止 session ID 附加到應用程式中的 URL。如果此屬性設定為
true
,用戶端必須使用 Cookie。預設值為true
。
-
entry-point-ref 通常,使用的
AuthenticationEntryPoint
將根據已組態設定的身份驗證機制來設定。此屬性允許透過定義自訂的AuthenticationEntryPoint
bean 來覆寫此行為,該 bean 將啟動身份驗證程序。
-
jaas-api-provision 如果可用,則以從
JaasAuthenticationToken
取得的Subject
身份執行請求,這是透過將JaasApiIntegrationFilter
bean 新增到堆疊來實作的。預設值為false
。
-
name Bean 識別符,用於在內容中的其他地方參考 bean。
-
once-per-request 對應於
FilterSecurityInterceptor
的observeOncePerRequest
屬性。預設值為false
。
-
filter-all-dispatcher-types 對應於
AuthorizationFilter
的shouldFilterAllDispatcherTypes
屬性。當use-authorization-manager=false
時不起作用。預設值為true
。
-
pattern 為 http 元素定義模式控制將透過其定義的過濾器列表過濾的請求。解釋取決於已組態設定的 request-matcher。如果未定義模式,則將匹配所有請求,因此應首先宣告最特定的模式。
-
realm 設定用於基本身份驗證的 realm 名稱(如果已啟用)。對應於
BasicAuthenticationEntryPoint
上的realmName
屬性。
-
request-matcher 定義在
FilterChainProxy
和由intercept-url
建立的 bean 中使用的RequestMatcher
策略,以匹配傳入的請求。選項目前為mvc
、ant
、regex
和ciRegex
,分別用於 Spring MVC、ant、正則表達式和不區分大小寫的正則表達式。針對每個 intercept-url 元素,使用其 pattern、method 和 servlet-path 屬性建立單獨的實例。Ant 路徑使用AntPathRequestMatcher
匹配,正則表達式使用RegexRequestMatcher
匹配,對於 Spring MVC 路徑匹配,則使用MvcRequestMatcher
。有關確切如何執行匹配的更多詳細資訊,請參閱這些類別的 Javadoc。如果 Spring MVC 存在於類別路徑中,MVC 是預設策略,否則使用 Ant 路徑。
-
request-matcher-ref 參考實作
RequestMatcher
的 bean,它將確定是否應使用此FilterChain
。這是 pattern 的更強大的替代方案。
-
security 透過將此屬性設定為
none
,請求模式可以映射到空的過濾器鏈。將不會套用任何安全性,並且 Spring Security 的任何功能都將不可用。
-
security-context-repository-ref 允許將自訂的
SecurityContextHolderStrategy
注入到SecurityContextPersistenceFilter
、SecurityContextHolderFilter
、BasicAuthenticationFilter
、UsernamePasswordAuthenticationFilter
、ExceptionTranslationFilter
、LogoutFilter
等。
-
security-context-explicit-save 如果為 true,則使用
SecurityContextHolderFilter
而不是SecurityContextPersistenceFilter
。需要明確儲存
-
security-context-repository-ref 允許將自訂的
SecurityContextRepository
注入到SecurityContextPersistenceFilter
中。
-
servlet-api-provision 提供
HttpServletRequest
安全性方法的版本,例如isUserInRole()
和getPrincipal()
,這些方法是透過將SecurityContextHolderAwareRequestFilter
bean 新增到堆疊來實作的。預設值為true
。
-
use-expressions 在
access
屬性中啟用 EL 表達式,如關於基於表達式的存取控制章節中所述。預設值為 true。
<access-denied-handler>
此元素允許您使用 error-page 屬性為 ExceptionTranslationFilter
使用的預設 AccessDeniedHandler
設定 errorPage
屬性,或使用 ref 屬性提供您自己的實作。在關於 ExceptionTranslationFilter 的章節中更詳細地討論了這一點。
<cors>
此元素允許組態設定 CorsFilter
。如果未指定 CorsFilter
或 CorsConfigurationSource
並且 Spring MVC 在類別路徑上,則使用 HandlerMappingIntrospector
作為 CorsConfigurationSource
。
<cors> 屬性
<cors>
元素上的屬性控制 headers 元素。
-
ref 可選屬性,指定
CorsFilter
的 bean 名稱。
-
cors-configuration-source-ref 可選屬性,指定要注入到 XML 命名空間建立的
CorsFilter
中的CorsConfigurationSource
的 bean 名稱。
<headers>
-
Cache-Control
、Pragma
和Expires
- 可以使用 cache-control 元素設定。這可確保瀏覽器不會快取您的安全頁面。 -
Strict-Transport-Security
- 可以使用 hsts 元素設定。這可確保瀏覽器自動請求 HTTPS 以用於未來的請求。 -
X-Frame-Options
- 可以使用 frame-options 元素設定。X-Frame-Options 標頭可用於防止點擊劫持攻擊。 -
X-XSS-Protection
- 可以使用 xss-protection 元素設定。X-XSS-Protection 標頭可由瀏覽器用於執行基本控制。 -
X-Content-Type-Options
- 可以使用 content-type-options 元素設定。X-Content-Type-Options 標頭可防止 Internet Explorer 從宣告的內容類型中 MIME 嗅探回應。這也適用於 Google Chrome,當下載擴充功能時。 -
Public-Key-Pinning
或Public-Key-Pinning-Report-Only
- 可以使用 hpkp 元素設定。這允許 HTTPS 網站抵抗使用錯誤頒發或以其他方式欺詐性憑證的攻擊者進行的冒充。 -
Content-Security-Policy
或Content-Security-Policy-Report-Only
- 可以使用 content-security-policy 元素設定。內容安全性原則 (CSP) 是一種 Web 應用程式可以利用來減輕內容注入漏洞的機制,例如跨站腳本 (XSS)。 -
Referrer-Policy
- 可以使用 referrer-policy 元素設定,Referrer-Policy 是一種 Web 應用程式可以利用來管理 referrer 欄位的機制,其中包含使用者上次所在的頁面。 -
Feature-Policy
- 可以使用 feature-policy 元素設定,Feature-Policy 是一種機制,允許 Web 開發人員選擇性地啟用、停用和修改瀏覽器中某些 API 和 Web 功能的行為。 -
Cross-Origin-Opener-Policy
- 可以使用 cross-origin-opener-policy 元素設定,Cross-Origin-Opener-Policy 是一種機制,可讓您確保頂層文件不與跨來源文件共用瀏覽內容群組。 -
Cross-Origin-Embedder-Policy
- 可以使用 cross-origin-embedder-policy 元素設定,Cross-Origin-Embedder-Policy 是一種機制,可防止文件載入任何未明確授予文件權限的跨來源資源。 -
Cross-Origin-Resource-Policy
- 可以使用 cross-origin-resource-policy 元素設定,Cross-Origin-Resource-Policy 是一種機制,傳達希望瀏覽器封鎖對給定資源的 no-cors 跨來源/跨網站請求。
<headers> 屬性
<headers>
元素上的屬性控制 headers 元素。
-
defaults-disabled 可選屬性,指定停用預設的 Spring Security HTTP 回應標頭。預設值為 false(包含預設標頭)。
-
disabled 可選屬性,指定停用 Spring Security 的 HTTP 回應標頭。預設值為 false(啟用標頭)。
<hsts>
啟用後,會將 Strict-Transport-Security 標頭新增到任何安全請求的回應中。這允許伺服器指示瀏覽器自動使用 HTTPS 以用於未來的請求。
<hsts> 屬性
-
disabled 指定是否應停用 Strict-Transport-Security。預設值為 false。
-
include-sub-domains 指定是否應包含子網域。預設值為 true。
-
max-age-seconds 指定主機應被視為已知 HSTS 主機的最長時間。預設值為一年。
-
request-matcher-ref 用於確定是否應設定標頭的 RequestMatcher 實例。預設值為 HttpServletRequest.isSecure() 為 true 時。
-
preload 指定是否應包含 preload。預設值為 false。
<hpkp>
啟用後,會將 HTTP 公鑰釘選擴充功能標頭新增到任何安全請求的回應中。這允許 HTTPS 網站抵抗使用錯誤頒發或以其他方式欺詐性憑證的攻擊者進行的冒充。
<hpkp> 屬性
-
disabled 指定是否應停用 HTTP 公鑰釘選 (HPKP)。預設值為 true。
-
include-sub-domains 指定是否應包含子網域。預設值為 false。
-
max-age-seconds 設定 Public-Key-Pins 標頭的 max-age 指令的值。預設值為 60 天。
-
report-only 指定瀏覽器是否應僅報告釘選驗證失敗。預設值為 true。
-
report-uri 指定瀏覽器應向其報告釘選驗證失敗的 URI。
<content-security-policy>
啟用後,會將 內容安全性原則 (CSP) 標頭新增到回應中。CSP 是一種 Web 應用程式可以利用來減輕內容注入漏洞的機制,例如跨站腳本 (XSS)。
<content-security-policy> 屬性
-
policy-directives Content-Security-Policy 標頭的安全性原則指令,或者如果 report-only 設定為 true,則使用 Content-Security-Policy-Report-Only 標頭。
-
report-only 設定為 true,以啟用 Content-Security-Policy-Report-Only 標頭,僅用於報告原則違規。預設值為 false。
<referrer-policy>
啟用後,會將 Referrer Policy 標頭新增到回應中。
<feature-policy>
啟用後,會將 Feature Policy 標頭新增到回應中。
<frame-options>
啟用後,會將 X-Frame-Options 標頭新增到回應中,這允許較新的瀏覽器執行一些安全性檢查並防止 點擊劫持 攻擊。
<frame-options> 屬性
-
disabled 如果停用,則不會包含 X-Frame-Options 標頭。預設值為 false。
-
policy
-
DENY
無論嘗試這樣做的網站為何,頁面都無法在框架中顯示。這是指定 frame-options-policy 時的預設值。 -
SAMEORIGIN
頁面只能在與頁面本身相同來源的框架中顯示
換句話說,如果您指定 DENY,則不僅從其他網站載入框架中的頁面嘗試會失敗,而且從同一網站載入框架中的頁面嘗試也會失敗。另一方面,如果您指定 SAMEORIGIN,您仍然可以在框架中使用頁面,只要將其包含在框架中的網站與提供頁面的網站相同即可。
-
<permissions-policy>
將 Permissions-Policy 標頭新增到回應中。
<xss-protection>
將 X-XSS-Protection 標頭新增到回應中,以協助防範 反射式/Type-1 跨網站腳本 (XSS) 攻擊。這絕不是對 XSS 攻擊的全面保護!
<xss-protection> 屬性
-
xss-protection-disabled 不包含用於 反射式/Type-1 跨網站腳本 (XSS) 保護的標頭。
-
xss-protection-header-value 明確設定 反射式/Type-1 跨網站腳本 (XSS) 標頭的值。選項之一:"0"、"1"、"1; mode=block"。預設值為 "0"。
<content-type-options>
Add the X-Content-Type-Options header with the value of nosniff to the response. This disables MIME-sniffing for IE8+ and Chrome extensions.
<content-type-options> 的父元素
<cross-origin-embedder-policy>
啟用時,將 Cross-Origin-Embedder-Policy 標頭添加到回應中。
<cross-origin-opener-policy>
啟用時,將 Cross-Origin-Opener-Policy 標頭添加到回應中。
<cross-origin-resource-policy>
啟用時,將 Cross-Origin-Resource-Policy 標頭添加到回應中。
<header>
<anonymous>
<csrf>
此元素將 跨站請求偽造 (CSRF) 保護添加到應用程式。它還更新預設的 RequestCache,使其僅在成功驗證後重播 "GET" 請求。更多資訊可以在參考文件的 跨站請求偽造 (CSRF) 章節中找到。
<csrf> 屬性
-
disabled 可選屬性,指定停用 Spring Security 的 CSRF 保護。預設值為 false(啟用 CSRF 保護)。強烈建議保持啟用 CSRF 保護。
-
token-repository-ref 要使用的 CsrfTokenRepository。預設值為
HttpSessionCsrfTokenRepository
。
-
request-handler-ref 可選的
CsrfTokenRequestHandler
要使用。預設值為CsrfTokenRequestAttributeHandler
。
-
request-matcher-ref 用於判斷是否應套用 CSRF 的 RequestMatcher 實例。預設值為除了 "GET"、"TRACE"、"HEAD"、"OPTIONS" 之外的任何 HTTP 方法。
<custom-filter>
此元素用於將篩選器添加到篩選器鏈。它不會建立任何額外的 bean,而是用於選擇應用程式上下文中已定義的 jakarta.servlet.Filter
類型的 bean,並將其添加到 Spring Security 維護的篩選器鏈中的特定位置。完整詳細資訊可以在 命名空間章節 中找到。
<expression-handler>
<form-login>
用於將 UsernamePasswordAuthenticationFilter
添加到篩選器堆疊,並將 LoginUrlAuthenticationEntryPoint
添加到應用程式上下文中,以按需提供驗證。這將始終優先於其他命名空間建立的進入點。如果未提供任何屬性,則將在 URL "/login" 自動產生登入頁面 [2] 可以使用 <form-login>
屬性 自訂行為。
<form-login> 屬性
-
always-use-default-target 如果設定為
true
,則使用者將始終從 default-target-url 給定的值開始,無論他們如何到達登入頁面。對應到UsernamePasswordAuthenticationFilter
的alwaysUseDefaultTargetUrl
屬性。預設值為false
。
-
authentication-details-source-ref 參考將由驗證篩選器使用的
AuthenticationDetailsSource
。
-
authentication-failure-handler-ref 可以用作 authentication-failure-url 的替代方案,讓您可以完全控制驗證失敗後的導航流程。該值應為應用程式上下文中
AuthenticationFailureHandler
bean 的名稱。
-
authentication-failure-url 對應到
UsernamePasswordAuthenticationFilter
的authenticationFailureUrl
屬性。定義登入失敗時瀏覽器將重新導向到的 URL。預設值為/login?error
,自動登入頁面產生器將自動處理該 URL,並使用錯誤訊息重新呈現登入頁面。
-
authentication-success-handler-ref 這可以用作 default-target-url 和 always-use-default-target 的替代方案,讓您可以完全控制成功驗證後的導航流程。該值應為應用程式上下文中
AuthenticationSuccessHandler
bean 的名稱。預設情況下,使用SavedRequestAwareAuthenticationSuccessHandler
的實作,並注入 default-target-url。
-
default-target-url 對應到
UsernamePasswordAuthenticationFilter
的defaultTargetUrl
屬性。如果未設定,則預設值為 "/"(應用程式根目錄)。使用者登入後將被帶到此 URL,前提是他們在嘗試存取受保護資源時未被要求登入,在這種情況下,他們將被帶到原始請求的 URL。
-
login-page 應該用於呈現登入頁面的 URL。對應到
LoginUrlAuthenticationEntryPoint
的loginFormUrl
屬性。預設值為 "/login"。
-
login-processing-url 對應到
UsernamePasswordAuthenticationFilter
的filterProcessesUrl
屬性。預設值為 "/login"。
-
password-parameter 包含密碼的請求參數的名稱。預設值為 "password"。
-
username-parameter 包含使用者名稱的請求參數的名稱。預設值為 "username"。
-
authentication-success-forward-url 將
ForwardAuthenticationSuccessHandler
對應到UsernamePasswordAuthenticationFilter
的authenticationSuccessHandler
屬性。
-
authentication-failure-forward-url 將
ForwardAuthenticationFailureHandler
對應到UsernamePasswordAuthenticationFilter
的authenticationFailureHandler
屬性。
<oauth2-login>
OAuth 2.0 登入 功能設定使用 OAuth 2.0 和/或 OpenID Connect 1.0 提供者的驗證支援。
<oauth2-login> 屬性
-
client-registration-repository-ref 參考到
ClientRegistrationRepository
。
-
access-token-response-client-ref 參考到
OAuth2AccessTokenResponseClient
。
-
user-service-ref 參考到
OAuth2UserService
。
-
oidc-user-service-ref 參考到 OpenID Connect
OAuth2UserService
。
-
login-processing-url 篩選器處理驗證請求的 URI。
-
login-page 將使用者傳送到登入的 URI。
-
authentication-success-handler-ref 參考到
AuthenticationSuccessHandler
。
-
authentication-failure-handler-ref 參考到
AuthenticationFailureHandler
。
-
jwt-decoder-factory-ref 參考到
OidcAuthorizationCodeAuthenticationProvider
使用的JwtDecoderFactory
。
<oauth2-client>
<client-registrations>
用於註冊到 OAuth 2.0 或 OpenID Connect 1.0 提供者的用戶端 (ClientRegistration) 的容器元素。
<client-registration>
代表註冊到 OAuth 2.0 或 OpenID Connect 1.0 提供者的用戶端。
<client-registration> 屬性
-
registration-id 唯一識別
ClientRegistration
的 ID。
-
client-id 用戶端識別碼。
-
client-secret 用戶端密碼。
-
client-authentication-method 用於向提供者驗證用戶端的方法。支援的值為 client_secret_basic、client_secret_post、private_key_jwt、client_secret_jwt 和 none (公用用戶端)。
-
redirect-uri 用戶端註冊的重新導向 URI,在使用者驗證並授權存取用戶端後,授權伺服器 會將最終使用者的使用者代理重新導向到該 URI。
-
scope 用戶端在授權請求流程期間請求的 scope(s),例如 openid、email 或 profile。
-
client-name 用於用戶端的描述性名稱。該名稱可能在某些情況下使用,例如在自動產生的登入頁面中顯示用戶端名稱時。
-
provider-id 關聯提供者的參考。可以參考
<provider>
元素,或使用常見的提供者之一(google、github、facebook、okta)。
<provider>
OAuth 2.0 或 OpenID Connect 1.0 提供者的組態資訊。
<provider> 屬性
-
provider-id 唯一識別提供者的 ID。
-
token-uri 授權伺服器的權杖端點 URI。
-
user-info-uri 用於存取已驗證最終使用者的宣告/屬性的 UserInfo 端點 URI。
-
user-info-authentication-method 將存取權杖傳送到 UserInfo 端點時使用的驗證方法。支援的值為 header、form 和 query。
-
user-info-user-name-attribute 在 UserInfo 回應中傳回的屬性名稱,該屬性引用最終使用者的名稱或識別符。
-
jwk-set-uri 用於從授權伺服器檢索 JSON Web Key (JWK) 集合的 URI,其中包含用於驗證 ID 權杖和可選的 UserInfo 回應的 JSON Web Signature (JWS) 的加密金鑰。
-
issuer-uri 用於使用 OpenID Connect 提供者的 組態端點 或授權伺服器的 Metadata 端點 的探索,來初始設定
ClientRegistration
的 URI。
<oauth2-resource-server>
<opaque-token>
代表將授權 opaque 權杖的 OAuth 2.0 資源伺服器。
<opaque-token> 屬性
-
introspector-ref 參考到
OpaqueTokenIntrospector
。這是一個更大的元件,會覆寫introspection-uri
、client-id
和client-secret
。
-
introspection-uri 用於內省 opaque 權杖詳細資訊的 Introspection Uri。應與
client-id
和client-secret
一起使用。
-
client-id 用於針對提供的
introspection-uri
進行用戶端驗證的用戶端 ID。
-
client-secret 用於針對提供的
introspection-uri
進行用戶端驗證的用戶端密碼。
-
authentication-converter-ref 參考到
OpaqueTokenAuthenticationConverter
。負責將成功的內省結果轉換為Authentication
實例。
<relying-party-registrations>
用於註冊到 SAML 2.0 身分提供者 (Identity Provider) 的信賴方 (ClientRegistration) 的容器元素。
<relying-party-registration>
代表註冊到 SAML 2.0 身分提供者的信賴方。
<relying-party-registration> 屬性
-
registration-id 唯一識別
RelyingPartyRegistration
的 ID。
-
metadata-location 聲明方 (asserting party) 中繼資料位置。
-
client-id 信賴方的 EntityID。
-
assertion-consumer-service-location AssertionConsumerService 位置。相當於信賴方的
<SPSSODescriptor>
中<AssertionConsumerService Location="…"/>
中找到的值。
-
assertion-consumer-service-binding AssertionConsumerService Binding。相當於信賴方的
<SPSSODescriptor>
中<AssertionConsumerService Binding="…"/>
中找到的值。支援的值為 POST 和 REDIRECT。
-
single-logout-service-location SingleLogoutService 位置。相當於信賴方的 <SPSSODescriptor> 中 <SingleLogoutService Location="…"/> 中找到的值。
-
single-logout-service-response-location SingleLogoutService ResponseLocation。相當於信賴方的 <SPSSODescriptor> 中 <SingleLogoutService ResponseLocation="…"/> 中找到的值。
-
single-logout-service-binding SingleLogoutService Binding。相當於信賴方的 <SPSSODescriptor> 中 <SingleLogoutService Binding="…"/> 中找到的值。支援的值為 POST 和 REDIRECT。
-
asserting-party-id 關聯聲明方的參考。必須參考
<asserting-party>
元素。
<asserting-party>
SAML 2.0 聲明方的組態資訊。
<asserting-party> 屬性
-
asserting-party-id 唯一識別聲明方的 ID。
-
entity-id 聲明方的 EntityID。
-
want-authn-requests-signed
WantAuthnRequestsSigned
設定,指示聲明方偏好信賴方在傳送AuthnRequest
之前應簽署該請求。
-
single-sign-on-service-location SingleSignOnService 位置。
-
single-sign-on-service-binding SingleSignOnService Binding。支援的值為 POST 和 REDIRECT。
-
signing-algorithms 此聲明方的
org.opensaml.saml.ext.saml2alg.SigningMethod
演算法清單,依偏好順序排列。
-
single-logout-service-location SingleLogoutService 位置。相當於聲明方的 <IDPSSODescriptor> 中 <SingleLogoutService Location="…"/> 中找到的值。
-
single-logout-service-response-location SingleLogoutService ResponseLocation。相當於聲明方的 <IDPSSODescriptor> 中 <SingleLogoutService ResponseLocation="…"/> 中找到的值。
-
single-logout-service-binding SingleLogoutService Binding。相當於聲明方的 <IDPSSODescriptor> 中 <SingleLogoutService Binding="…"/> 中找到的值。支援的值為 POST 和 REDIRECT。
<http-basic>
<intercept-url>
此元素用於定義應用程式感興趣的 URL 模式集,並組態應如何處理它們。它用於建構 FilterSecurityInterceptor
使用的 FilterInvocationSecurityMetadataSource
。如果特定 URL 需要透過 HTTPS 存取,例如,它也負責組態 ChannelProcessingFilter
。當將指定的模式與傳入的請求進行比對時,比對會按照元素宣告的順序進行。因此,最特定的模式應放在最前面,最一般的模式應放在最後面。
<intercept-url> 屬性
-
access 列出將儲存在
FilterInvocationSecurityMetadataSource
中的存取屬性,用於定義的 URL 模式/方法組合。這應該是以逗號分隔的安全組態屬性清單(例如角色名稱)。
-
method HTTP 方法,將與模式和 servlet 路徑(可選)結合使用,以比對傳入的請求。如果省略,則任何方法都將比對。如果使用和不使用方法指定相同的模式,則特定於方法的比對將優先。
-
pattern 定義 URL 路徑的模式。內容將取決於包含的 http 元素中的
request-matcher
屬性,因此如果 Spring MVC 在類別路徑中,則預設為 MVC 比對器。
-
request-matcher-ref 對將用於判斷是否使用此
<intercept-url>
的RequestMatcher
的參考。
-
requires-channel 可以是 "http" 或 "https",具體取決於特定 URL 模式應分別透過 HTTP 或 HTTPS 存取。或者,當沒有偏好時,可以使用值 "any"。如果任何
<intercept-url>
元素上存在此屬性,則ChannelProcessingFilter
將被添加到篩選器堆疊,並且其額外的依賴項將被添加到應用程式上下文中。
如果添加了 <port-mappings>
組態,則 SecureChannelProcessor
和 InsecureChannelProcessor
bean 將使用它來判斷用於重新導向到 HTTP/HTTPS 的埠。
此屬性對於 filter-security-metadata-source 無效。 |
-
servlet-path servlet 路徑,將與模式和 HTTP 方法結合使用,以比對傳入的請求。僅當 request-matcher 為 'mvc' 時,此屬性才適用。此外,僅在以下 2 種使用案例中才需要該值:1) 在
ServletContext
中註冊了 2 個或更多HttpServlet
,它們的對應以'/'
開頭且不同;2) 模式以註冊的HttpServlet
路徑的相同值開始,不包括預設(根)HttpServlet
'/'
。
此屬性對於 filter-security-metadata-source 無效。 |
<logout>
將 LogoutFilter
添加到篩選器堆疊。這會使用 SecurityContextLogoutHandler
進行組態。
<logout> 屬性
-
invalidate-session 對應到
SecurityContextLogoutHandler
的invalidateHttpSession
。預設值為 "true",因此會話將在登出時失效。
-
logout-success-url 使用者登出後將被帶往的目的地 URL。預設值為 <form-login-login-page>/?logout(即 /login?logout)。
設定此屬性會將
SessionManagementFilter
注入一個SimpleRedirectInvalidSessionStrategy
,並使用該屬性值進行組態。當提交無效的會話 ID 時,將調用該策略,重新導向到已組態的 URL。
-
logout-url 將導致登出的 URL(即將由篩選器處理的 URL)。預設值為 "/logout"。
-
success-handler-ref 可以用於提供
LogoutSuccessHandler
的實例,登出後將調用該實例以控制導航。
<saml2-login>
SAML 2.0 登入 功能設定使用 SAML 2.0 服務提供者 (Service Provider) 的驗證支援。
<saml2-login> 屬性
-
relying-party-registration-repository-ref 參考到
RelyingPartyRegistrationRepository
。
-
authentication-request-repository-ref 參考到
Saml2AuthenticationRequestRepository
。
-
authentication-request-context-resolver-ref 參考到
Saml2AuthenticationRequestResolver
。
-
authentication-converter-ref 參考到
AuthenticationConverter
。
-
login-processing-url 篩選器處理驗證請求的 URI。
-
login-page 將使用者傳送到登入的 URI。
-
authentication-success-handler-ref 參考到
AuthenticationSuccessHandler
。
-
authentication-failure-handler-ref 參考到
AuthenticationFailureHandler
。
-
authentication-manager-ref 參考到
AuthenticationManager
。
<saml2-logout>
SAML 2.0 單一登出 功能設定對 RP 和 AP 啟動的 SAML 2.0 單一登出提供支援。
<saml2-logout> 屬性
-
logout-url 信賴方或聲明方可以用來觸發登出的 URL。
-
logout-request-url 聲明方可以用來傳送 SAML 2.0 登出請求的 URL。
-
logout-response-url 聲明方可以用來傳送 SAML 2.0 登出回應的 URL。
-
relying-party-registration-repository-ref 參考到
RelyingPartyRegistrationRepository
。
-
logout-request-validator-ref 參考到
Saml2LogoutRequestValidator
。
-
logout-request-resolver-ref 參考到
Saml2LogoutRequestResolver
。
-
logout-request-repository-ref 參考到
Saml2LogoutRequestRepository
。
-
logout-response-validator-ref 參考到
Saml2LogoutResponseValidator
。
-
logout-response-resolver-ref 參考到
Saml2LogoutResponseResolver
。
<port-mappings>
預設情況下,PortMapperImpl
的實例將被添加到組態中,以用於重新導向到安全和不安全的 URL。此元素可以選擇性地用於覆寫該類別定義的預設對應。每個子 <port-mapping>
元素定義一對 HTTP:HTTPS 埠。預設對應為 80:443 和 8080:8443。覆寫這些對應的範例可以在 重新導向到 HTTPS 中找到。
<remember-me>
將 RememberMeAuthenticationFilter
添加到堆疊。這反過來將根據屬性設定,使用 TokenBasedRememberMeServices
、PersistentTokenBasedRememberMeServices
或使用者指定的實作 RememberMeServices
的 bean 進行組態。
<remember-me> 屬性
-
authentication-success-handler-ref 如果需要自訂導覽,則在
RememberMeAuthenticationFilter
上設定authenticationSuccessHandler
屬性。此值應為應用程式內容中AuthenticationSuccessHandler
Bean 的名稱。
-
data-source-ref
DataSource
Bean 的參考。如果設定此項,將會使用PersistentTokenBasedRememberMeServices
,並使用JdbcTokenRepositoryImpl
實例進行設定。
-
remember-me-parameter 切換「記住我」驗證的請求參數名稱。預設為 "remember-me"。對應到
AbstractRememberMeServices
的 "parameter" 屬性。
-
key 對應到
AbstractRememberMeServices
的 "key" 屬性。應設定為唯一值,以確保「記住我」Cookie 僅在一個應用程式內有效 [3]。如果未設定此項,將會產生安全的隨機值。由於產生安全的隨機值可能需要一些時間,因此明確設定此值有助於在使用「記住我」功能時縮短啟動時間。
-
services-alias 將內部定義的
RememberMeServices
匯出為 Bean 別名,允許應用程式內容中的其他 Bean 使用它。
-
services-ref 允許完全控制篩選器將使用的
RememberMeServices
實作。此值應為應用程式內容中實作此介面的 Bean 的id
。如果正在使用登出篩選器,也應實作LogoutHandler
。
-
token-repository-ref 設定
PersistentTokenBasedRememberMeServices
,但允許使用自訂的PersistentTokenRepository
Bean。
-
token-validity-seconds 對應到
AbstractRememberMeServices
的tokenValiditySeconds
屬性。指定「記住我」Cookie 應有效的期間,以秒為單位。預設情況下,它將有效 14 天。
-
user-service-ref 「記住我」服務實作需要存取
UserDetailsService
,因此應用程式內容中必須定義一個。如果只有一個,命名空間配置將會自動選取並使用它。如果有多個實例,您可以使用此屬性明確指定 Beanid
。
<request-cache> 元素
<session-management>
Session-management 相關功能透過將 SessionManagementFilter
新增到篩選器堆疊來實作。
<session-management> 屬性
-
authentication-strategy-explicit-invocation 將此屬性設定為 true 將表示
SessionManagementFilter
將不會被注入,並且需要明確調用 SessionAuthenticationStrategy。
-
invalid-session-url 設定此屬性將會使用以屬性值設定的
SimpleRedirectInvalidSessionStrategy
來注入SessionManagementFilter
。當提交無效的 Session ID 時,將會調用策略,並重新導向到設定的 URL。
-
invalid-session-url 允許注入 SessionManagementFilter 使用的 InvalidSessionStrategy 實例。請使用此屬性或
invalid-session-url
屬性,但不要同時使用兩者。
-
session-authentication-error-url 定義當 SessionAuthenticationStrategy 引發例外狀況時應顯示的錯誤頁面 URL。如果未設定,則會將未經授權 (401) 錯誤代碼傳回給用戶端。請注意,如果錯誤發生在表單式登入期間,則此屬性不適用,在這種情況下,驗證失敗的 URL 將優先。
-
session-authentication-strategy-ref 允許注入 SessionManagementFilter 使用的 SessionAuthenticationStrategy 實例
-
session-fixation-protection 指示在使用者驗證時將如何應用會期固定保護。如果設定為 "none",則不會應用任何保護。"newSession" 將建立一個新的空會期,僅遷移與 Spring Security 相關的屬性。"migrateSession" 將建立一個新的會期,並將所有會期屬性複製到新的會期。在 Servlet 3.1 (Java EE 7) 和更新版本的容器中,指定 "changeSessionId" 將保留現有的會期,並使用容器提供的會期固定保護 (HttpServletRequest#changeSessionId())。在 Servlet 3.1 和更新版本的容器中,預設為 "changeSessionId",在舊版容器中預設為 "migrateSession"。如果在舊版容器中使用 "changeSessionId",則會擲回例外狀況。
如果啟用會期固定保護,則會使用適當設定的
DefaultSessionAuthenticationStrategy
注入SessionManagementFilter
。有關更多詳細資訊,請參閱此類別的 Javadoc。
<concurrency-control>
新增對並行會期控制的支援,允許限制使用者可以擁有的活動會期數。將會建立 ConcurrentSessionFilter
,並且 ConcurrentSessionControlAuthenticationStrategy
將與 SessionManagementFilter
一起使用。如果已宣告 form-login
元素,策略物件也將注入到已建立的驗證篩選器中。將會建立 SessionRegistry
的實例(SessionRegistryImpl
實例,除非使用者希望使用自訂 Bean)供策略使用。
<concurrency-control> 屬性
-
error-if-maximum-exceeded 如果設定為 "true",當使用者嘗試超過允許的最大會期數時,將會引發
SessionAuthenticationException
。預設行為是使原始會期過期。
-
expired-url 如果使用者嘗試使用已被並行會期控制器「過期」的會期,因為使用者已超過允許的會期數並已在其他地方重新登入,則使用者將被重新導向到的 URL。除非設定了
exception-if-maximum-exceeded
,否則應設定此項。如果未提供值,則只會將過期訊息直接寫回回應。
-
expired-url 允許注入 ConcurrentSessionFilter 使用的 ExpiredSessionStrategy 實例
-
max-sessions 對應到
ConcurrentSessionControlAuthenticationStrategy
的maximumSessions
屬性。指定-1
作為值以支援無限會期。
-
session-registry-alias 擁有對內部會期登錄的參考以在您自己的 Bean 或管理介面中使用也可能很有用。您可以使用
session-registry-alias
屬性公開內部 Bean,並為其指定一個名稱,以便您可以在配置中的其他位置使用。
-
session-registry-ref 使用者可以使用
session-registry-ref
屬性提供他們自己的SessionRegistry
實作。其他並行會期控制 Bean 將會被連接起來以使用它。
<x509>
<filter-chain-map>
<filter-chain>
用於在 內部定義特定的 URL 模式以及適用於符合該模式的 URL 的篩選器列表。當在列表中組裝多個 filter-chain 元素以配置 FilterChainProxy 時,最特定的模式必須放在列表的頂部,而最一般的模式放在底部。
<filter-chain> 屬性
-
filters 以逗號分隔的列表,參考實作
Filter
的 Spring Bean。值 "none" 表示此FilterChain
不應使用任何Filter
。
-
pattern 與 request-matcher 結合使用以建立 RequestMatcher 的模式
-
request-matcher-ref 對
RequestMatcher
的參考,該RequestMatcher
將用於判斷是否應調用filters
屬性中的任何Filter
。
<filter-security-metadata-source>
用於明確配置 FilterSecurityMetadataSource Bean,以用於 FilterSecurityInterceptor。通常只有在您明確配置 FilterChainProxy 而不是使用 <http> 元素時才需要。使用的 intercept-url 元素應僅包含 pattern、method 和 access 屬性。任何其他屬性都將導致配置錯誤。
<filter-security-metadata-source> 屬性
-
id Bean 識別符,用於在內容中的其他位置參考 Bean。
-
request-matcher 定義用於比對傳入請求的策略。目前的選項為 'ant'(用於 Ant 路徑模式)、'regex' 用於正規表示式,以及 'ciRegex' 用於不區分大小寫的正規表示式。
-
use-expressions 啟用在 <intercept-url> 元素的 'access' 屬性中使用表達式,而不是傳統的配置屬性列表。預設為 'true'。如果啟用,則每個屬性都應包含單個布林表達式。如果表達式評估為 'true',則將授予存取權。
DefaultLoginPageGeneratingFilter
負責呈現登入頁面,並將為正常表單登入和/或 OIDC 提供登入表單(如果需要)。PersistentTokenBasedRememberMeServices
的使用,在 PersistentTokenBasedRememberMeServices
中,權杖儲存在伺服器端。