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',则授予访问权限。