Web 应用程序安全
<http>
如果您在应用程序中使用<http>
元素,则会创建一个名为“springSecurityFilterChain”的FilterChainProxy
bean,并且<http>
元素中的配置将用于在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 会话的积极性。选项包括
-
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
将根据已配置的身份验证机制进行设置。此属性允许通过定义一个自定义的AuthenticationEntryPoint
bean 来覆盖此行为,该 bean 将启动身份验证过程。
-
jaas-api-provision 如果可用,则将请求作为从
JaasAuthenticationToken
获取的Subject
运行,JaasAuthenticationToken
是通过将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 设置用于基本身份验证(如果已启用)的领域名称。对应于
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 的引用,该 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 指定是否应包含预加载。默认值为 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 内容安全策略标头的安全策略指令,或者如果 report-only 设置为 true,则使用 Content-Security-Policy-Report-Only 标头。
-
report-only 设置为 true,以启用 Content-Security-Policy-Report-Only 标头,仅用于报告策略违规。默认值为 false。
<frame-options>
启用后,会在响应中添加 X-Frame-Options 头部,这允许较新的浏览器进行一些安全检查并防止 点击劫持 攻击。
<frame-options> 属性
-
disabled 如果禁用,则不会包含 X-Frame-Options 头部。默认值为 false。
-
policy
-
DENY
页面不能在框架中显示,无论尝试显示该页面的站点是什么。这是指定 frame-options-policy 时默认值。 -
SAMEORIGIN
页面只能在与页面本身相同来源的框架中显示
换句话说,如果您指定 DENY,那么不仅从其他站点加载页面时尝试在框架中加载页面会失败,而且从同一站点加载页面时尝试在框架中加载页面也会失败。另一方面,如果您指定 SAMEORIGIN,则只要包含该页面的框架的站点与提供该页面的站点相同,您仍然可以在框架中使用该页面。
-
<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>
将 X-Content-Type-Options 标头添加到响应中,其值为 nosniff。这 禁用 MIME 嗅探 用于 IE8+ 和 Chrome 扩展程序。
<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(该 bean 已在应用程序上下文中定义)并在 Spring Security 维持的过滤器链中添加该 bean。完整详细信息可以在 命名空间章节 中找到。
<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
,它将由自动登录页面生成器自动处理,重新渲染登录页面并显示错误消息。
-
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>
The OAuth 2.0 Login 功能使用 OAuth 2.0 和/或 OpenID Connect 1.0 提供者配置身份验证支持。
<oauth2-login> 属性
-
client-registration-repository-ref
ClientRegistrationRepository
的引用。
-
访问令牌响应客户端引用
OAuth2AccessTokenResponseClient
的引用。
-
用户服务引用
OAuth2UserService
的引用。
-
OpenID Connect 用户服务引用 OpenID Connect
OAuth2UserService
的引用。
-
登录处理 URL 过滤器处理身份验证请求的 URI。
-
登录页面 发送用户登录的 URI。
-
身份验证成功处理程序引用
AuthenticationSuccessHandler
的引用。
-
身份验证失败处理程序引用
AuthenticationFailureHandler
的引用。
-
JWT 解码器工厂引用
OidcAuthorizationCodeAuthenticationProvider
使用的JwtDecoderFactory
的引用。
<oauth2-client>
<client-registrations>
用于注册的客户端(ClientRegistration)的容器元素,这些客户端已注册到 OAuth 2.0 或 OpenID Connect 1.0 提供者。
<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 用于访问已验证最终用户声明/属性的用户信息端点 URI。
-
user-info-authentication-method 将访问令牌发送到用户信息端点时使用的身份验证方法。支持的值为 header、form 和 query。
-
user-info-user-name-attribute UserInfo 响应中返回的属性名称,用于引用最终用户的姓名或标识符。
-
jwk-set-uri 用于从授权服务器检索 JSON Web Key (JWK) 集的 URI,其中包含用于验证 JSON Web Signature (JWS) 的加密密钥(用于验证 ID 令牌,以及可选的 UserInfo 响应)。
<oauth2-resource-server>
<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>
注册的依赖方(ClientRegistration)与 SAML 2.0 身份提供者一起使用的容器元素。
<relying-party-registration>
表示与 SAML 2.0 身份提供者注册的依赖方
<relying-party-registration> 属性
-
registration-id 唯一标识
RelyingPartyRegistration
的 ID。
-
metadata-location 声明方元数据位置。
-
client-id 依赖方的 EntityID。
-
assertion-consumer-service-location AssertionConsumerService 位置。等效于依赖方
<SPSSODescriptor>
中<AssertionConsumerService Location="…"/>
中找到的值。
-
assertion-consumer-service-binding AssertionConsumerService 绑定。等效于依赖方
<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 单点注销服务绑定。等效于依赖方 `
` 中 ` ` 中的值。支持的值为 **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 单点登录服务 位置。
-
single-sign-on-service-binding 单点登录服务 绑定。支持的值为 **POST** 和 **REDIRECT**。
-
signing-algorithms 此断言方的 `org.opensaml.saml.ext.saml2alg.SigningMethod` 算法列表,按优先级排序。
-
single-logout-service-location 单点注销服务位置。等效于断言方<IDPSSODescriptor>中<SingleLogoutService Location="…"/>中的值。
-
single-logout-service-response-location 单点注销服务响应位置。等效于断言方<IDPSSODescriptor>中<SingleLogoutService ResponseLocation="…"/>中的值。
-
single-logout-service-binding 单点注销服务绑定。等效于断言方<IDPSSODescriptor>中<SingleLogoutService Binding="…"/>中的值。支持的值为POST和REDIRECT。
<http-basic>
<intercept-url>
此元素用于定义应用程序感兴趣的 URL 模式集,并配置如何处理它们。它用于构建 FilterSecurityInterceptor
使用的 FilterInvocationSecurityMetadataSource
。它还负责配置 ChannelProcessingFilter
,例如,如果特定 URL 需要通过 HTTPS 访问。当将指定的模式与传入请求匹配时,匹配是在元素声明的顺序中完成的。因此,最具体的模式应该放在最前面,最通用的模式应该放在最后面。
<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' 时适用。此外,该值仅在以下两种情况下需要:1) 在
ServletContext
中注册了两个或多个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
注入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
的引用。
-
登录处理 URL 过滤器处理身份验证请求的 URI。
-
登录页面 发送用户登录的 URI。
-
身份验证成功处理程序引用
AuthenticationSuccessHandler
的引用。
-
身份验证失败处理程序引用
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>
与会话管理相关的功能是通过在过滤器堆栈中添加 SessionManagementFilter
来实现的。
<session-management> 属性
-
authentication-strategy-explicit-invocation 将此属性设置为 true 意味着
SessionManagementFilter
不会被注入,并且需要显式调用 SessionAuthenticationStrategy。
-
invalid-session-url 设置此属性将使用配置了属性值的
SimpleRedirectInvalidSessionStrategy
注入SessionManagementFilter
。当提交无效的会话 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
,并将使用 ConcurrentSessionControlAuthenticationStrategy
与 SessionManagementFilter
一起使用。如果已声明 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
作为值以支持无限会话。
-
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
的引用,它将用于确定是否应调用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”,则授予访问权限。