Web Application Security
-
AuthenticationSuccessHandler
-
AuthenticationFailureHandler
-
BCryptPasswordEncoder
-
Cipher
-
ExceptionTranslator
-
FilterChainProxy
-
HttpServletRequest
-
HttpServletResponse
-
HttpMethod
-
InjectionPoint
-
Interceptor
-
MutableContext
-
RequestCache
-
RequestContextHolder
-
RequestMatch
-
RequestMatcher
-
RequestMatcherRegistry
-
RequestMapping
-
ServletContext
-
SessionManager
-
UserDetailsChecker
-
UserDetailsService
-
UserDetailsServiceImpl
-
ValidationException
-
Validator
-
access-decision-manager-ref
-
authentication-manager-ref
-
default-target-url
-
disable-url-rewriting
-
entry-point-ref
-
filter-all-dispatcher-types
-
jaas-api-provision
-
observation-registry-ref
-
pattern
-
realm
-
require-channel
-
servlet-api-provision
-
use-authorization-manager
-
use-expressions
-
use-secure-cookie
-
user-service-ref
<http>
如果您在应用程序中使用了 <http>`元素,那么会创建一个名为“springSecurityFilterChain”的 `FilterChainProxy`bean,并且该元素中的配置将被用来在 `FilterChainProxy`中构建一个过滤器链。从 Spring Security 3.1 开始,可以再使用额外的 `http`元素添加额外的过滤器链。见 introductory chapter for how to set up the mapping from your `web.xml
。某些核心的过滤器始终会在过滤器链中创建,而其它过滤器将会根据其中出现的属性和子元素而添加到堆栈中。标准过滤器的顺序是固定的(在命名空间引言中见 the filter order table,移除之前框架版本中错误的常见来源,在这些版本中,用户必须在 `FilterChainProxy`bean 中明确配置过滤器链。当然,如果您想要完全控制配置,您仍然可以这样做。
所有需要引用 AuthenticationManager
的过滤器都会自动注入由命名空间配置创建的内部实例。
每个 <http>
命名空间块总是创建 SecurityContextPersistenceFilter
, ExceptionTranslationFilter
和 FilterSecurityInterceptor
。这些是固定的,不能被替代品取代。
<http> Attributes
<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`身份运行请求,这通过向堆栈添加 `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`中使用的 `RequestMatcher`策略和 `intercept-url`创建的 bean,以匹配传入的请求。目前的选项有 `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*如果为真,使用
SecurityContextHolderFilter
代替SecurityContextPersistenceFilter
. 需要显式保存
-
*security-context-repository-ref*允许将自定义
SecurityContextRepository
引入SecurityContextPersistenceFilter
.
-
*servlet-api-provision*提供
HttpServletRequest
安全方法(如isUserInRole()
和getPrincipal()
)的版本,这些方法通过将SecurityContextHolderAwareRequestFilter
bean 添加到堆栈中实现。默认值为true
.
-
*use-expressions*在
access
属性中启用 EL 表达式,如 expression-based access-control 章节中所述。默认值为真。
<access-denied-handler>
该元素允许您为 `ExceptionTranslationFilter`所使用的默认 `AccessDeniedHandler`设置 `errorPage`属性,使用 error-page属性,或使用 ref属性来提供您自己的实现。这在 ExceptionTranslationFilter的章节中作了更详细的讨论。
<cors>
此元素允许配置 CorsFilter
。 如果未指定 CorsFilter
或 CorsConfigurationSource
且 Spring MVC 在类路径中,则将 HandlerMappingIntrospector
用作 CorsConfigurationSource
。
<cors> Attributes
<cors>
元素上的属性控制 headers 元素。
-
*ref*可选属性,用于指定
CorsFilter
的 Bean 名称。
-
*cors-configuration-source-ref*可选属性,用于指定要注入到 XML 命名空间创建的
CorsFilter
中的CorsConfigurationSource
的 Bean 名称。
<headers>
该元素用于配置附加的(安全性)标头以便随应答送出。它为几个标头启用了轻松配置,并且还允许通过 header元素设置自定义标头。可以在参考的 Security 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 元素设置: Content Security Policy (CSP) 是 Web 应用程序可以利用来减轻内容注入漏洞(例如跨站点脚本 (XSS))的机制。 -
Referrer-Policy
- 可以使用 referrer-policy 元素设置: Referrer-Policy 是 Web 应用程序可以利用来管理引用字段的机制,该字段包含用户所在的上一页。 -
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> Attributes
<headers>
元素上的属性控制 headers 元素。
-
*defaults-disabled*可选属性,用于指定禁用 Spring Security 的默认 HTTP 响应标头。默认值为假(包括默认标头)。
-
*disabled*可选属性,用于指定禁用 Spring Security 的 HTTP 响应标头。默认值为假(标头已启用)。
<cache-control>
<hsts>
启用后,将向任何安全请求的响应中添加 Strict-Transport-Security 头部。这允许服务器指示浏览器在将来的请求中自动使用 HTTPS。
<hsts> Attributes
-
*disabled*指定是否应禁用 Strict-Transport-Security。默认值为假。
-
*include-sub-domains*指定是否应包括子域。默认值为真。
-
*max-age-seconds*指定主机应被视为已知 HSTS 主机的最长时间。默认一年。
-
*request-matcher-ref*用于确定是否应设置头的 RequestMatcher 实例。默认值为 HttpServletRequest.isSecure() 为 true。
-
*preload*指定是否应包含预加载。默认值为 false。
<hpkp>
启用后,将向任何安全请求的响应中添加 Public Key Pinning Extension for HTTP 头部。这允许 HTTPS 网站抵御攻击者使用错误签发或其他欺诈性证书进行的假冒。
<hpkp> Attributes
-
*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>
启用后,将向响应中添加 Content Security Policy (CSP) 头部。CSP 是一种 Web 应用程序可以利用的机制,以减轻内容注入漏洞,例如跨站点脚本 (XSS)。
<content-security-policy> Attributes
-
*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 header,这允许更新的浏览器执行一些安全性检查和防止 clickjacking攻击。
<frame-options> Attributes
-
*disabled*如果禁用,将不包含 X-Frame-Options 头。默认值为 false。
-
policy
-
`DENY`此页面无法在框架中显示,无论尝试执行此操作的网站如何。当指定 frame-options-policy 时,这是默认设置。
-
`SAMEORIGIN`此页面只能显示在与页面本身同源的框架中
-
换句话说,如果您指定 DENY,不仅从其他网站加载页面尝试在框架中加载失败,而且从同一个网站加载时也会失败。另一方面,如果您指定 SAMEORIGIN,只要网站在框架中包含该页面并且与提供该页面的网站相同,您仍然可以在框架中使用该页面。
<permissions-policy>
向响应添加 Permissions-Policy header。
<xss-protection>
向响应添加 X-XSS-Protection header来协助防御 reflected / Type-1 Cross-Site Scripting (XSS)攻击。这绝不是对 XSS 攻击的全面保护!
<xss-protection> Attributes
-
*xss-protection-disabled*不包括 reflected / Type-1 Cross-Site Scripting (XSS)保护的头。
-
*xss-protection-header-value*明确设置 reflected / Type-1 Cross-Site Scripting (XSS)头的值。一个: “0”、“1”、“1;mode=block”。默认为“0”。
<content-type-options>
向响应添加名为 nosniff 的 X-Content-Type-Options 标头。该 disables MIME-sniffing用于 IE8+ 和 Chrome 扩展。
Parent Elements of <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>
该元素将会向应用程序添加 Cross Site Request Forger (CSRF)保护。它还更新默认的 RequestCache,以便在身份验证成功后仅回复“GET”请求。可以在参考的 Cross Site Request Forgery (CSRF)章节中找到附加信息。
<csrf> Attributes
-
*disabled*指定禁用 Spring 安全性的 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 维护的过滤器链中的特定位置。可以在 namespace chapter中找到全部详细信息。
<expression-handler>
<form-login>
用于向过滤器堆栈添加 UsernamePasswordAuthenticationFilter
,并向应用程序上下文添加 LoginUrlAuthenticationEntryPoint
以按需提供身份验证。这将始终优先于其他由命名空间创建的入口点。如果没有提供属性,则将在 URL“/login”上自动生成登录页面,此功能只是为了方便,不适用于生产(已经选择了一种视图技术,并且可以用于呈现自定义登录页面)。DefaultLoginPageGeneratingFilter
类负责呈现登录页面,并且将在需要时提供普通表单登录和/或 OIDC 的登录表单。可以使用 <<`<form-login>` 属性,nsa-form-login-attributes>> 自定义行为。
<form-login> Attributes
-
*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>
OAuth 2.0 Login功能使用 OAuth 2.0 和/或 OpenID Connect 1.0 提供者来配置身份验证支持。
<oauth2-login> Attributes
-
client-registration-repository-ref Reference to the
ClientRegistrationRepository
.
-
access-token-response-client-ref Reference to the
OAuth2AccessTokenResponseClient
.
-
user-service-ref Reference to the
OAuth2UserService
.
-
*oidc-user-service-ref*对 OpenID Connect `OAuth2UserService`的引用。
-
*login-processing-url*过滤器处理认证请求的 URI。
-
*login-page*用于向用户发送登录请求的 URI。
-
authentication-success-handler-ref Reference to the
AuthenticationSuccessHandler
.
-
authentication-failure-handler-ref Reference to the
AuthenticationFailureHandler
.
-
jwt-decoder-factory-ref`OidcAuthorizationCodeAuthenticationProvider`使用的 `JwtDecoderFactory`的引用。
<oauth2-client>
配置 OAuth 2.0 Client的支持。
<oauth2-client> Attributes
-
client-registration-repository-ref Reference to the
ClientRegistrationRepository
.
<client-registrations>
向 OAuth 2.0 或 OpenID Connect 1.0 提供者注册 (ClientRegistration) 的客户端的容器元素。
<client-registration>
代表一个已使用 OAuth 2.0 或 OpenID Connect 1.0 供应商注册的客户端。
<client-registration> Attributes
-
*registration-id*唯一标识 `ClientRegistration`的 ID。
-
client-id The client identifier.
-
client-secret The client secret.
-
client-authentication-method*用于使用提供程序对客户端进行身份认证的方法。支持的值为 *client_secret_basic, client_secret_post, private_key_jwt, client_secret_jwt*和 *none (public clients)。
-
*redirect-uri*客户端的注册重定向 URI,_Authorization Server_在最终用户经过身份验证并授权了对客户端的访问权限后将最终用户用户代理重定向到该 URI。
-
*scope*客户端在授权请求流程期间请求的范围 (scope),例如 openid、email 或 profile。
-
*client-name*用于客户端的描述性名称。该名称可在特定情况下使用,例如在自动生成的登录页面中显示客户端名称时。
-
*provider-id*对关联提供程序的引用。可以引用 `<provider>`元素或使用其中一个通用提供程序 (google、github、facebook、okta)。
<provider>
OAuth 2.0 或 OpenID Connect 1.0 供应商的配置信息。
<provider> Attributes
-
*provider-id*唯一标识提供程序的 ID。
-
*token-uri*授权服务器的令牌端点 URI。
-
*user-info-uri*用于访问经过身份验证的最终用户声明/属性的用户信息端点 URI。
-
user-info-authentication-method*在向用户信息端点发送访问令牌时使用的身份验证方法。支持的值为 *header, form*和 *query。
-
*user-info-user-name-attribute*用户信息响应中返回的属性名称,该名称引用最终用户的名称或标识符。
-
*jwk-set-uri*用于从授权服务器检索 JSON Web Key (JWK)集的 URI,其中包含用于验证 ID 令牌和用户信息响应(可选)的 JSON Web Signature (JWS)的加密密钥。
-
*issuer-uri*用于最初配置 `ClientRegistration`的 URI,该 URI 使用 OpenID Connect 提供程序的 Configuration endpoint或授权服务器的 Metadata endpoint进行发现。
<oauth2-resource-server>
<opaque-token>
表示将授权不透明令牌的 OAuth 2.0 资源服务器
<opaque-token> Attributes
-
*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> Attributes
-
*registration-id*唯一标识 `RelyingPartyRegistration`的 ID。
-
*metadata-location*断言方元数据位置。等同于 `<SPSSODescriptor>`中依赖方 `<AssertionConsumerService Location="…​"/>`中的值。
-
client-id The relying party’s EntityID.
-
assertion-consumer-service-location*AssertionConsumerService 位置。等同于 `<SPSSODescriptor>`中依赖方 `<SPSSODescriptor>`中的 `<AssertionConsumerService Binding="…​"/>`中的值。受支持的值为 *POST*和 *REDIRECT。
-
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*SingleLogoutService 绑定。等同于依赖方 <SPSSODescriptor> 中 <SingleLogoutService Binding="…"/> 中的值。受支持的值为 *POST*和 *REDIRECT。
-
*asserting-party-id*对相关断言方的引用。必须引用 `<asserting-party>`元素。
<asserting-party>
SAML 2.0 断言方的配置信息。
<asserting-party> Attributes
-
*asserting-party-id*唯一标识断言方的 ID。
-
*entity-id*断言方的 EntityID
-
want-authn-requests-signed`WantAuthnRequestsSigned`设置,指示断言方更希望依赖方在发送 `AuthnRequest`之前对其进行签名。
-
single-sign-on-service-location The SingleSignOnService Location.
-
single-sign-on-service-binding SingleSignOnService绑定。受支持的值为 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 绑定。等同于断言方 <IDPSSODescriptor> 中 <SingleLogoutService Binding="…"/> 中的值。受支持的值为 *POST*和 *REDIRECT。
<http-basic>
<intercept-url>
此元素用于定义应用程序感兴趣的 URL 模式集,并配置处理这些 URL 的方式。它用于构建 FilterSecurityInterceptor
使用的 FilterInvocationSecurityMetadataSource
。如果需要使用 HTTPS 访问特定 URL,它还负责配置 ChannelProcessingFilter
。在将指定模式与传入请求进行匹配时,匹配按照声明元素的顺序进行。因此,最具体的模式应排在前面,最普通的模式应排在后面。
<intercept-url> Attributes
-
*access*列出将存储在 `FilterInvocationSecurityMetadataSource`中的访问属性,以用于定义的 URL 模式/方法组合。这应为安全配置属性(如角色名称)的逗号分隔列表。
-
*method*将与模式和 Servlet 路径(可选)结合使用以匹配传入请求的 HTTP 方法。如果省略,则任何方法都将匹配。如果使用和不使用某个方法指定了相同的模式,则特定于方法的匹配将优先。
-
*pattern*定义 URL 路径的模式。内容将取决于包含 http 元素的 `request-matcher`属性,因此如果 Spring MVC 在类路径中,则会默认为 MVC 匹配器。
-
*request-matcher-ref*对
RequestMatcher`的引用,将用于确定是否使用此 `<intercept-url>
。
-
*requires-channel*可以是“http”或“https”,具体取决于是否应该分别通过 HTTP 或 HTTPS 访问特定的 URL 模式。或者,当没有首选项时,可以使用值“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> Attributes
-
*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 Login 特性将通过 SAML 2.0 服务提供者配置验证支持。
<saml2-login> Attributes
-
relying-party-registration-repository-ref Reference to the
RelyingPartyRegistrationRepository
.
-
authentication-request-repository-ref Reference to the
Saml2AuthenticationRequestRepository
.
-
authentication-request-context-resolver-ref Reference to the
Saml2AuthenticationRequestResolver
.
-
authentication-converter-ref Reference to the
AuthenticationConverter
.
-
*login-processing-url*过滤器处理认证请求的 URI。
-
*login-page*用于向用户发送登录请求的 URI。
-
authentication-success-handler-ref Reference to the
AuthenticationSuccessHandler
.
-
authentication-failure-handler-ref Reference to the
AuthenticationFailureHandler
.
-
authentication-manager-ref Reference to the
AuthenticationManager
.
<saml2-logout>
SAML 2.0 Single Logout 特性将配置支持 RP 和 AP 发起的 SAML 2.0 单点注销。
<saml2-logout> Attributes
-
*logout-url*依赖方或断言方可以触发注销的 URL。
-
*logout-request-url*断言方可以发送 SAML 2.0 注销请求的 URL。
-
*logout-response-url*断言方可以发送 SAML 2.0 注销响应的 URL。
-
relying-party-registration-repository-ref Reference to the
RelyingPartyRegistrationRepository
.
-
logout-request-validator-ref Reference to the
Saml2LogoutRequestValidator
.
-
logout-request-resolver-ref Reference to the
Saml2LogoutRequestResolver
.
-
logout-request-repository-ref Reference to the
Saml2LogoutRequestRepository
.
-
logout-response-validator-ref Reference to the
Saml2LogoutResponseValidator
.
-
logout-response-resolver-ref Reference to the
Saml2LogoutResponseResolver
.
<port-mappings>
默认情况下,PortMapperImpl
的实例将添加到配置中,以用于重定向到安全和不安全的 URL。这个元素可选择用于替代该类定义的默认映射。每个子 <port-mapping>
元素定义一对 HTTP:HTTPS 端口。默认映射为 80:443 和 8080:8443。可在 Redirect to HTTPS 中找到一个替代它们的示例。
<remember-me>
将 RememberMeAuthenticationFilter
添加到堆栈。这反过来将使用 TokenBasedRememberMeServices
、PersistentTokenBasedRememberMeServices
或实现 RememberMeServices
的用户指定 bean 根据属性设置进行配置。
<remember-me> Attributes
-
*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 仅在一个应用程序中有效。这不会影响令牌存储在服务器端时的 `PersistentTokenBasedRememberMeServices`的使用。如果未设置此项,将生成一个安全的随机值。由于生成安全的随机值需要一定的时间,因此在使用记住我功能时,显式设置此值有助于提高启动时间。
-
*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> Element
<session-management>
会话管理相关功能是通过将 SessionManagementFilter
添加到筛选器堆栈来实现的。
<session-management> Attributes
-
*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
实例(一个 SessionRegistryImpl
实例,除非用户希望使用自定义 bean)以供策略使用。
<concurrency-control> Attributes
-
*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 的筛选器列表。当多个过滤器链元素以列表方式组装在一起以配置 FilterChainProxy 时,最具体的模式必须放在列表顶部,最通用的模式必须放在底部。
<filter-chain> Attributes
-
*filters*对实现
Filter
的 Spring Bean 的引用的逗号分隔列表。值“none”表示不应为该FilterChain
使用任何Filter
。
-
*pattern*创建一个 RequestMatcher 的模式,并与 request-matcher 结合使用
-
*request-matcher-ref*对
RequestMatcher
的引用,它将用于确定是否应调用filters
属性中的任何Filter
。
<filter-security-metadata-source>
用于显式配置 FilterSecurityMetadataSource bean 以与 FilterSecurityInterceptor 一起使用。通常仅在你显式配置 FilterChainProxy(而不是使用<http>元素)时才需要。使用的 intercept-url 元素应仅包含模式、方法和访问属性。任何其他属性都会导致配置错误。
<filter-security-metadata-source> Attributes
-
*id*Bean 标识符,用于在上下文的其他位置引用 Bean。
-
*request-matcher*为匹配传入请求定义要使用的策略。当前选项有“ant”(用于 ant 路径模式)、“regex”(用于正则表达式)和“ciRegex”(用于不区分大小写的正则表达式)。
-
*use-expressions*启用在 <intercept-url> 元素的“access”属性中使用表达式,而不是使用传统的配置属性列表。默认为“true”。如果启用,则每个属性应包含一个布尔表达式。如果表达式计算结果为“true”,则将授予访问权限。