Web 應用程式安全
<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。預設情況下,使用帶有RoleVoter和AuthenticatedVoter的AffirmativeBased實現。
-
authentication-manager-ref 引用此 http 元素建立的
FilterChain所使用的AuthenticationManager。
-
observation-registry-ref 對用於
FilterChain和相關元件的ObservationRegistry的引用。
-
auto-config 自動註冊登入表單、基本認證、登出服務。如果設定為 "true",則新增所有這些功能(儘管您仍然可以透過提供相應的元素來定製每個配置)。如果未指定,則預設為 "false"。不建議使用此屬性。請使用顯式配置元素以避免混淆。
-
create-session 控制 Spring Security 類建立 HTTP 會話的急切程度。選項包括
-
always- 如果不存在會話,Spring Security 將主動建立一個會話。 -
ifRequired- Spring Security 僅在需要時才建立會話(預設值)。 -
never- Spring Security 永遠不會建立會話,但如果應用程式建立,則會使用會話。 -
stateless- Spring Security 不會建立會話,並忽略會話以獲取 SpringAuthentication。
-
-
disable-url-rewriting 阻止會話 ID 附加到應用程式中的 URL。如果此屬性設定為
true,客戶端必須使用 cookie。預設值為true。
-
entry-point-ref 通常,使用的
AuthenticationEntryPoint將根據已配置的認證機制進行設定。此屬性允許透過定義一個定製的AuthenticationEntryPointbean 來覆蓋此行為,該 bean 將啟動認證過程。
-
jaas-api-provision 如果可用,則將請求作為從
JaasAuthenticationToken獲取的Subject執行,這是透過將JaasApiIntegrationFilterbean 新增到堆疊中來實現的。預設為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 設定用於基本認證的領域名稱(如果啟用)。對應於
BasicAuthenticationEntryPoint上的realmName屬性。
-
redirect-to-https-request-matcher-ref 引用一個實現
RequestMatcher的 bean,該 bean 將確定哪些請求必須重定向到 HTTPS。這在例如希望在本地執行 HTTP 和在生產環境中使用請求頭執行 HTTPS 時很有用。
-
request-matcher 定義
FilterChainProxy和intercept-url建立的 bean 中用於匹配傳入請求的RequestMatcher策略。選項當前為mvc、ant、regex和ciRegex,分別對應 Spring MVC、ant、正則表示式和不區分大小寫的正則表示式。為每個 intercept-url 元素使用其 pattern、method 和 servlet-path 屬性建立單獨的例項。預設情況下,路徑使用PathPatternRequestMatcher匹配;但是,正則表示式使用RegexRequestMatcher匹配。有關這些類如何執行匹配的詳細資訊,請參閱 Javadoc。如果 Spring MVC 存在於類路徑中,則 MVC 是預設策略,否則使用 Ant 路徑。
-
request-matcher-ref 引用一個實現
RequestMatcher的 bean,該 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())的版本,這些方法透過將SecurityContextHolderAwareRequestFilterbean 新增到堆疊中來實現。預設為true。
-
use-expressions 啟用
access屬性中的 EL 表示式,如關於基於表示式的訪問控制的章節所述。預設值為 true。
<access-denied-handler>
此元素允許您使用 error-page 屬性為 ExceptionTranslationFilter 使用的預設 AccessDeniedHandler 設定 errorPage 屬性,或使用 ref 屬性提供您自己的實現。這在關於 ExceptionTranslationFilter 的部分有更詳細的討論。
<cors>
<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 將響應從宣告的 content-type 進行 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 指定是否應包含預載入。預設值為 false。
<hpkp>
啟用後,為任何安全請求向響應新增 HTTP 公鑰固定擴充套件 頭。這允許 HTTPS 網站抵禦攻擊者使用錯誤頒發或其他欺詐性證書進行的冒充。
<hpkp> 屬性
-
disabled 指定是否應停用 HTTP 公鑰固定 (HPKP)。預設值為 true。
-
include-sub-domains 指定是否應包含子域。預設值為 false。
-
max-age-seconds 設定 Public-Key-Pins 頭 max-age 指令的值。預設值為 60 天。
-
report-only 指定瀏覽器是否只報告 pin 驗證失敗。預設值為 true。
-
report-uri 指定瀏覽器應向其報告 pin 驗證失敗的 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 頭,以幫助防範 反射式 / 型別 1 跨站指令碼 (XSS) 攻擊。這絕不是對 XSS 攻擊的全面保護!
<xss-protection> 屬性
-
xss-protection-disabled 不包含用於 反射式 / 型別 1 跨站指令碼 (XSS) 保護的頭。
-
xss-protection-header-value 顯式設定用於 反射式 / 型別 1 跨站指令碼 (XSS) 頭的實際值。選項之一:"0"、"1"、"1; mode=block"。預設為 "0"。
<content-type-options>
將值為 nosniff 的 X-Content-Type-Options 頭新增到響應中。這 停用了 IE8+ 和 Chrome 擴充套件的 MIME 嗅探。
<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 頭。
<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 的替代,讓您在認證失敗後完全控制導航流程。該值應該是應用程式上下文中
AuthenticationFailureHandlerbean 的名稱。
-
authentication-failure-url 對映到
UsernamePasswordAuthenticationFilter的authenticationFailureUrl屬性。定義登入失敗時瀏覽器將重定向到的 URL。預設為/login?error,它將由自動登入頁面生成器自動處理,重新渲染帶有錯誤訊息的登入頁面。
-
authentication-success-handler-ref 這可以作為 default-target-url 和 always-use-default-target 的替代,讓您在成功認證後完全控制導航流程。該值應該是應用程式上下文中
AuthenticationSuccessHandlerbean 的名稱。預設情況下,使用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 客戶端在授權請求流程中請求的範圍,例如 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 簽名 (JWS) 的加密金鑰。
<oauth2-resource-server>
向配置新增 BearerTokenAuthenticationFilter、BearerTokenAuthenticationEntryPoint 和 BearerTokenAccessDeniedHandler。此外,必須指定 <jwt> 或 <opaque-token>。
<oauth2-resource-server> 屬性
-
authentication-manager-resolver-ref 引用一個
AuthenticationManagerResolver,它將在請求時解析AuthenticationManager。
-
bearer-token-resolver-ref 引用一個
BearerTokenResolver,它將從請求中檢索不記名令牌。這不能與authentication-converter-ref結合使用。
-
entry-point-ref 引用一個
AuthenticationEntryPoint,它將處理未經授權的請求。
-
authentication-converter-ref 引用一個
AuthenticationConverter,它將請求轉換為認證。這不能與bearer-token-resolver-ref結合使用。
<opaque-token>
表示將授權不透明令牌的 OAuth 2.0 資源伺服器
<opaque-token> 屬性
-
introspector-ref 引用一個
OpaqueTokenIntrospector。這是一個更大的元件,它會覆蓋introspection-uri、client-id和client-secret。
-
introspection-uri 用於內省不透明令牌詳細資訊的內省 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 身份提供者註冊的依賴方(ClientRegistration)的容器元素。
<relying-party-registration>
表示註冊到 SAML 2.0 身份提供者的依賴方。
<relying-party-registration> 屬性
-
registration-id 唯一標識
RelyingPartyRegistration的 ID。
-
metadata-location 斷言方元資料位置。
-
client-id 依賴方的 EntityID。
-
assertion-consumer-service-location AssertionConsumerService Location。等同於依賴方的
<SPSSODescriptor>中<AssertionConsumerService Location="…"/>的值。
-
assertion-consumer-service-binding AssertionConsumerService Binding。等同於依賴方的
<SPSSODescriptor>中<AssertionConsumerService Binding="…"/>的值。支援的值為 POST 和 REDIRECT。
-
single-logout-service-location SingleLogoutService Location。等同於依賴方的 <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 繫結。支援的值為 POST 和 REDIRECT。
-
signing-algorithms 此斷言方的
org.opensaml.saml.ext.saml2alg.SigningMethod演算法列表,按優先順序排序。
-
single-logout-service-location SingleLogoutService Location。等同於斷言方的 <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 將與模式和 servlet 路徑(可選)結合使用以匹配傳入請求的 HTTP 方法。如果省略,任何方法都將匹配。如果指定了相同模式但帶方法和不帶方法,則帶方法的匹配將優先。
-
pattern 定義 URL 路徑的模式。內容將取決於包含 http 元素的
request-matcher屬性,因此如果 Spring MVC 在類路徑中,則預設為 MVC 匹配器。
-
request-matcher-ref 引用一個
RequestMatcher,它將用於確定是否使用此<intercept-url>。
-
requires-channel 可以是 "http" 或 "https",具體取決於特定的 URL 模式應透過 HTTP 還是 HTTPS 訪問。或者,當沒有偏好時,可以使用值 "any"。如果任何
<intercept-url>元素上存在此屬性,則ChannelProcessingFilter將被新增到過濾器堆疊中,並且其附加依賴項將新增到應用程式上下文中。
如果添加了 <port-mappings> 配置,這將由 SecureChannelProcessor 和 InsecureChannelProcessor bean 使用,以確定重定向到 HTTP/HTTPS 所使用的埠。
| 此屬性對 filter-security-metadata-source 無效。 |
-
servlet-path 將與模式和 HTTP 方法結合使用以匹配傳入請求的 servlet 路徑。此屬性僅在 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)
設定此屬性將使用配置的屬性值配置的
SimpleRedirectInvalidSessionStrategy注入SessionManagementFilter。當提交無效會話 ID 時,將呼叫該策略,重定向到配置的 URL。
-
logout-url 將導致登出的 URL(即將被過濾器處理的 URL)。預設為 "/logout"。
-
success-handler-ref 可用於提供
LogoutSuccessHandler例項,該例項將在登出後呼叫以控制導航。
<saml2-login>
SAML 2.0 登入 功能配置了使用 SAML 2.0 服務提供者的認證支援。
<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屬性。該值應為應用程式上下文中AuthenticationSuccessHandlerbean 的名稱。
-
data-source-ref 對
DataSourcebean 的引用。如果設定此項,將使用PersistentTokenBasedRememberMeServices並配置一個JdbcTokenRepositoryImpl例項。
-
remember-me-parameter 切換記住我認證的請求引數名稱。預設為 "remember-me"。對映到
AbstractRememberMeServices的 "parameter" 屬性。
-
key 對映到
AbstractRememberMeServices的 "key" 屬性。應該設定為一個唯一值,以確保記住我 (remember-me) cookie 僅在同一個應用程式中有效 [3]。如果未設定,將生成一個安全的隨機值。由於生成安全的隨機值可能需要一段時間,因此在使用記住我功能時,明確設定此值有助於縮短啟動時間。
-
services-alias 將內部定義的
RememberMeServices匯出為 bean 別名,允許應用程式上下文中的其他 bean 使用它。
-
services-ref 允許完全控制過濾器將使用的
RememberMeServices實現。該值應該是應用程式上下文中實現此介面的 bean 的id。如果使用了登出過濾器,也應該實現LogoutHandler。
-
token-repository-ref 配置
PersistentTokenBasedRememberMeServices,但允許使用自定義的PersistentTokenRepositorybean。
-
token-validity-seconds 對映到
AbstractRememberMeServices的tokenValiditySeconds屬性。指定記住我 cookie 的有效期(以秒為單位)。預設情況下,它將有效 14 天。
-
user-service-ref 記住我服務實現需要訪問
UserDetailsService,因此必須在應用程式上下文中定義一個。如果只有一個,它將由名稱空間配置自動選擇和使用。如果有多個例項,您可以使用此屬性明確指定 beanid。
<request-cache> 元素
<session-management>
會話管理相關功能透過在過濾器堆疊中新增 SessionManagementFilter 來實現。
<session-management> 屬性
-
authentication-strategy-explicit-invocation 將此屬性設定為 true 意味著不會注入
SessionManagementFilter,並且需要顯式呼叫 SessionAuthenticationStrategy。
-
invalid-session-url 設定此屬性將為
SessionManagementFilter注入一個配置了屬性值的SimpleRedirectInvalidSessionStrategy。當提交無效會話 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" 會丟擲異常。
如果啟用了會話固定保護,
SessionManagementFilter將注入一個適當配置的DefaultSessionAuthenticationStrategy。有關更多詳細資訊,請參閱此類的 Javadoc。
<concurrency-control>
新增對併發會話控制的支援,允許限制使用者可以擁有的活動會話數。將建立一個 ConcurrentSessionFilter,並結合 SessionManagementFilter 使用 ConcurrentSessionControlAuthenticationStrategy。如果已宣告 form-login 元素,則策略物件也將注入到建立的身份驗證過濾器中。將建立一個 SessionRegistry 例項(除非使用者希望使用自定義 bean,否則為 SessionRegistryImpl 例項)供策略使用。
<concurrency-control> 屬性
-
error-if-maximum-exceeded 如果設定為 "true",當用戶嘗試超出最大允許會話數時,將引發
SessionAuthenticationException。預設行為是使原始會話過期。
-
expired-url 如果使用者嘗試使用因超出允許會話數並在其他地方重新登入而被併發會話控制器“過期”的會話時,使用者將被重定向到的 URL。除非設定了
exception-if-maximum-exceeded,否則應設定此值。如果未提供值,則會直接將過期訊息寫入響應。
-
expired-url 允許注入 ConcurrentSessionFilter 使用的 ExpiredSessionStrategy 例項
-
max-sessions 對映到
ConcurrentSessionControlAuthenticationStrategy的maximumSessions屬性。將值指定為-1以支援無限會話。
-
max-sessions-ref 允許注入 ConcurrentSessionControlAuthenticationStrategy 使用的 SessionLimit 例項
-
session-registry-alias 擁有對內部會話登錄檔的引用也很有用,以便在您自己的 bean 或管理介面中使用。您可以使用
session-registry-alias屬性公開內部 bean,為其指定一個名稱,您可以在配置中的其他地方使用該名稱。
-
session-registry-ref 使用者可以使用
session-registry-ref屬性提供自己的SessionRegistry實現。其他併發會話控制 bean 將被連線起來使用它。
<x509>
新增對 X.509 身份驗證的支援。X509AuthenticationFilter 將被新增到堆疊中,並建立一個 Http403ForbiddenEntryPoint bean。後者僅在沒有使用其他身份驗證機制時才會被使用(其唯一功能是返回 HTTP 403 錯誤程式碼)。還將建立一個 PreAuthenticatedAuthenticationProvider,它將使用者許可權的載入委託給 UserDetailsService。
<x509> 屬性
-
authentication-details-source-ref 對
AuthenticationDetailsSource的引用
-
principal-extractor-ref 對身份驗證過濾器將使用的
X509PrincipalExtractor的引用。
-
subject-principal-regex 定義一個正則表示式,該正則表示式將用於從證書中提取使用者名稱(用於
UserDetailsService)。
-
user-service-ref 允許在配置了多個例項的情況下,將特定的
UserDetailsService與 X.509 結合使用。如果未設定,將嘗試自動定位合適的例項並使用它。
<filter-chain-map>
<filter-chain>
用於定義特定的 URL 模式以及適用於該模式匹配的 URL 的過濾器列表。當多個 filter-chain 元素按順序組裝成一個列表以配置 FilterChainProxy 時,最具體的模式必須放在列表頂部,最通用的模式放在底部。
<filter-chain> 屬性
-
filters 一個逗號分隔的 Spring bean 引用列表,這些 bean 實現
Filter。值 "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',則授予訪問許可權。