# Web 应用程序安全性

## \<debug\>

启用 Spring 安全调试基础设施。这将提供人类可读的（多行）调试信息，以监视进入安全过滤器的请求。这可能包括敏感信息，例如请求参数或标题，并且应该仅在开发环境中使用。

## \<http\>

如果在应用程序中使用`<http>`元素，则会创建一个名为“SpringSecurityFilterChain”的`FilterChainProxy` Bean，并且该元素中的配置将用于在`FilterChainProxy`中构建过滤器链。从 Spring Security3.1 开始，额外的`http`元素可以用来添加额外的过滤链<sup class="footnote">[<a id="_footnoteref_1" class="footnote" href="#_footnotedef_1" title="View footnote.">1</a>]</sup>用于如何从你的`web.xml`设置映射。一些核心过滤器总是在过滤器链中创建的，而另一些将根据存在的属性和子元素添加到堆栈中。标准过滤器的位置是固定的（参见名称空间介绍中的[过滤器订单表](../../configuration/xml-namespace.html#filter-stack)），当用户必须在`FilterChainProxy` Bean 中显式地配置过滤器链时，消除了以前版本框架的常见错误来源。当然，如果你需要完全控制配置，你仍然可以这样做。

所有需要引用[`AuthenticationManager`]（../../authentication/architecture.html# Servlet-authentication-authenticationManager）的过滤器都将自动注入由名称空间配置创建的内部实例。

每个`<http>`名称空间块总是创建一个`SecurityContextPersistenceFilter`，一个`ExceptionTranslationFilter`和一个`FilterSecurityInterceptor`。这些都是固定的，不能用替代品代替。

### \<http\>属性

`<http>`元素上的属性控制核心过滤器上的一些属性。

* **access-decision-manager-ref**可选属性，指定用于授权 HTTP 请求的`AccessDecisionManager`实现的 ID。默认情况下，`AffirmativeBased`实现用于`RoleVoter`和`AuthenticatedVoter`。

* **认证-管理器-ref**对`AuthenticationManager`的引用，用于此 HTTP 元素创建的`FilterChain`。

* **自动配置**自动注册一个登录表单、基本身份验证、注销服务。如果设置为“true”，则会添加所有这些功能（尽管你仍然可以通过提供相应的元素来定制每个功能的配置）。如果未指定，默认为“false”。不建议使用此属性。使用显式配置元素来避免混淆。

* **create-session**控制着由 Spring 安全类创建 HTTP会话的渴望。选项包括：

  * `always`- Spring 安全性将主动创建一个会话如果一个不存在。

  * `ifRequired`- Spring 安全性仅在需要会话时才会创建会话（默认值）。

  * `never`- Spring 安全性永远不会创建会话，但是如果应用程序创建了，则会使用一个。

  * `stateless`- Spring 安全性不会创建会话并忽略用于获得 Spring `Authentication`的会话。

* **禁用 URL 重写**防止将会话ID 追加到应用程序中的 URL。如果此属性设置为`true`，则客户端必须使用 cookie。默认值为`true`。

* **入口点-参考**通常使用的`AuthenticationEntryPoint`将根据已配置的身份验证机制进行设置。此属性允许通过定义一个定制的`AuthenticationEntryPoint` Bean 来重写此行为，该定义将启动身份验证过程。

* **JAAS-API-供应**如果可用，则以从`JaasAuthenticationToken`获取的`Subject`的形式运行请求，该请求通过向堆栈添加`JaasApiIntegrationFilter` Bean 来实现。默认值为`false`。

* **姓名**一个 Bean 标识符，用于在上下文的其他地方引用 Bean。

* **每次请求一次**对应于`observeOncePerRequest`的`FilterSecurityInterceptor`属性。默认值为`true`。

* **模式**为[http](#nsa-http)元素定义一个模式，控制将通过它定义的过滤器列表过滤的请求。解释依赖于配置的[请求匹配程序](#nsa-http-request-matcher)。如果没有定义模式，那么将匹配所有请求，因此应该首先声明最特定的模式。

* **领域**设置用于基本身份验证的领域名称（如果启用）。对应于`BasicAuthenticationEntryPoint`上的`realmName`属性。

* **请求匹配程序**定义了`RequestMatcher`策略中使用的`FilterChainProxy`和由`intercept-url`创建的 bean，以匹配传入的请求。对于 Spring MVC、 Ant、正则表达式和不区分大小写的正则表达式，当前的选项分别是`mvc`、`ant`、`regex`和`ciRegex`。使用[pattern](#nsa-intercept-url-pattern)、[method](#nsa-intercept-url-method)和[servlet-path](#nsa-intercept-url-servlet-path)属性为每个[截取-URL](#nsa-intercept-url)元素创建一个单独的实例。 Ant 路径是使用`AntPathRequestMatcher`进行匹配的，正则表达式是使用`RegexRequestMatcher`进行匹配的，并且对于 Spring MVC 路径是使用`MvcRequestMatcher`进行匹配的。有关这些类的更多详细信息，请参见 Javadoc。 Ant 路径是默认策略。

* **request-matcher-ref**对实现`RequestMatcher`的 Bean 的引用，该引用将确定是否应该使用此`FilterChain`。这是一个比[pattern](#nsa-http-pattern)更强大的替代方案。

* **安全**通过将此属性设置为`none`，可以将一个请求模式映射到一个空的过滤器链。将不会应用任何安全性，并且 Spring 安全性的任何功能都将不可用。

* **security-context-repository-ref**允许将自定义`SecurityContextRepository`注入到`SecurityContextPersistenceFilter`中。

* **servlet-api-provision**提供`HttpServletRequest`安全方法的版本，例如`isUserInRole()`和`getPrincipal()`，这些方法通过向堆栈中添加`SecurityContextHolderAwareRequestFilter` Bean 来实现。默认值为`true`。

* **使用表达式**在`access`属性中启用 el-表达式，如[基于表达式的访问控制](../../authorization/expression-based.html#el-access-web)一章中所述。默认值为 true。

### \<http\>的子元素

* [拒绝访问的处理程序](#nsa-access-denied-handler)

* [anonymous](#nsa-anonymous)

* [cors](#nsa-cors)

* [csrf](#nsa-csrf)

* [自定义过滤器](#nsa-custom-filter)

* [表达式处理程序](#nsa-expression-handler)

* [form-login](#nsa-form-login)

* [headers](#nsa-headers)

* [http-basic](#nsa-http-basic)

* [截取-URL](#nsa-intercept-url)

* [jee](#nsa-jee)

* [logout](#nsa-logout)

* [OAuth2-客户端](#nsa-oauth2-client)

* [OAuth2-登录](#nsa-oauth2-login)

* [OAuth2-资源服务器](#nsa-oauth2-resource-server)

* [OpenID-登录](#nsa-openid-login)

* [密码管理](#nsa-password-management)

* [端口映射](#nsa-port-mappings)

* [记住-我](#nsa-remember-me)

* [请求-缓存](#nsa-request-cache)

* [session-management](#nsa-session-management)

* [x509](#nsa-x509)

## \<access-denied-handler\>

这个元素允许你使用[error-page](#nsa-access-denied-handler-error-page)属性为`AccessDeniedHandler`使用的默认`AccessDeniedHandler`属性设置`errorPage`属性，或者使用[ref](#nsa-access-denied-handler-ref)属性提供你自己的实现。这将在[ExceptionTranslationFilter](../../architecture.html#servlet-exceptiontranslationfilter)一节中进行更详细的讨论。

### \<access-denied-handler\>的父元素

* [http](#nsa-http)

### \<access-denied-handler\>属性

* **错误页面**被拒绝访问的页面，如果经过身份验证的用户请求一个他们没有权限访问的页面，该页面将被重定向到该页面。

* **参考**定义了对`AccessDeniedHandler`类型的 Spring  Bean 的引用。

## \<cors\>

这个元素允许配置`CorsFilter`。如果指定了 no`CorsFilter`或`CorsConfigurationSource`，并且 Spring MVC 在 Classpath 上，则使用`HandlerMappingIntrospector`作为`CorsConfigurationSource`。

### \<cors\>属性

`<cors>`元素上的属性控制 headers 元素。

* **参考**可选属性，指定`CorsFilter`的 Bean 名称。

* **CORS-configuration-source-ref**可选属性，该属性指定要注入到由 XML 命名空间创建的`CorsFilter`中的`CorsConfigurationSource`的 Bean 名称。

### \<cors\>的父元素

* [http](#nsa-http)

## \<headers\>

该元素允许配置附加的（安全性）头，以便与响应一起发送。它支持几个头的简单配置，还允许通过[header](#nsa-header)元素设置自定义头。其他信息，可以在[安全标头](../../../features/exploits/headers.html#headers)部分的引用中找到。

* `Cache-Control`，`Pragma`，和`Expires`-可以使用[高速缓存控制](#nsa-cache-control)元素进行设置。这确保了浏览器不会缓存你的安全页面。

* `Strict-Transport-Security`-可以使用[hsts](#nsa-hsts)元素进行设置。这确保了浏览器自动为将来的请求请求请求 HTTPS。

* `X-Frame-Options`-可以使用[框架-选项](#nsa-frame-options)元素进行设置。[X-帧-选项](https://en.wikipedia.org/wiki/Clickjacking#X-Frame-Options)标头可用于防止单击劫持攻击。

* `X-XSS-Protection`-可以使用[XSS-保护](#nsa-xss-protection)元素进行设置。浏览器可以使用[X-XSS-保护](https://en.wikipedia.org/wiki/Cross-site_scripting)头来执行基本控制。

* `X-Content-Type-Options`-可以使用[内容类型选项](#nsa-content-type-options)元素进行设置。[X-Content-Type-Options](https://blogs.msdn.com/b/ie/archive/2008/09/02/ie8-security-part-vi-beta-2-update.aspx)头可以防止 Internet Explorer 从声明的 Content-Type MIME 嗅探响应。这也适用于谷歌 Chrome，当下载扩展时。

* `Public-Key-Pinning`或`Public-Key-Pinning-Report-Only`-可以使用[hpkp](#nsa-hpkp)元素进行设置。这使得 HTTPS 网站能够抵抗攻击者使用错误发行或其他欺诈性证书的假冒行为。

* `Content-Security-Policy`或`Content-Security-Policy-Report-Only`-可以使用[内容安全策略](#nsa-content-security-policy)元素进行设置。[内容安全策略](https://www.w3.org/TR/CSP2/)是一种机制，Web 应用程序可以利用该机制来减轻内容注入漏洞，例如跨站点脚本。

* `Referrer-Policy`-可以使用[推荐人-政策](#nsa-referrer-policy)元素进行设置，[推荐人-政策](https://www.w3.org/TR/referrer-policy/)是一种机制，Web 应用程序可以利用该机制来管理 Referrer 字段，该字段包含用户所在的最后一个页面。

* `Feature-Policy`-可以使用[特征-策略](#nsa-feature-policy)元素进行设置，[特征-策略](https://wicg.github.io/feature-policy/)是一种机制，允许 Web 开发人员选择性地启用、禁用和修改浏览器中某些 API 和 Web 功能的行为。

### \<headers\>属性

`<headers>`元素上的属性控制 headers 元素。

* **默认值-禁用**可选属性，该属性指定禁用默认的 Spring Security 的 HTTP 响应头。默认值为 false（包括默认的标头）。

* **已禁用**可选属性，指定禁用 Spring Security 的 HTTP 响应头。默认值为 false（已启用标头）。

### \<headers\>的父元素

* [http](#nsa-http)

### \<headers\>的子元素

* [高速缓存控制](#nsa-cache-control)

* [内容安全策略](#nsa-content-security-policy)

* [内容类型选项](#nsa-content-type-options)

* [特征-策略](#nsa-feature-policy)

* [框架-选项](#nsa-frame-options)

* [header](#nsa-header)

* [hpkp](#nsa-hpkp)

* [hsts](#nsa-hsts)

* [权限策略](#nsa-permissions-policy)

* [推荐人-政策](#nsa-referrer-policy)

* [XSS-保护](#nsa-xss-protection)

## \<cache-control\>

添加`Cache-Control`、`Pragma`和`Expires`标题，以确保浏览器不会缓存你的安全页面。

### \<cache-control\>属性

* **已禁用**指定是否应禁用缓存控制。默认为 false。

### \<cache-control\>的父元素

* [headers](#nsa-headers)

## \<hsts\>

启用时，将[严格的运输安全](https://tools.ietf.org/html/rfc6797)头添加到响应中，用于处理任何安全请求。这允许服务器指示浏览器在将来的请求中自动使用 HTTPS。

### \<hsts\>属性

* **已禁用**指定是否应禁用 strict-transport-security。默认为 false。

* **包含-子域**指定是否应包含子域。默认为 true。

* **最大年龄秒**指定主机应被视为已知 HSTS 主机的最大时间。违约一年。

* **request-matcher-ref**用于确定是否应设置标头的 requestmatcher 实例。默认情况是，如果 HttpServletRequest.isSecure（）为真。

* **预加载**指定是否应包含预加载。默认为 false。

### \<hsts\>的父元素

* [headers](#nsa-headers)

## \<hpkp\>

启用时，将[HTTP 的公钥固定扩展](https://tools.ietf.org/html/rfc7469)头添加到响应中，用于处理任何安全请求。这使得 HTTPS 网站能够抵抗攻击者使用错误发行或其他欺诈性证书的假冒行为。

### \<hpkp\>属性

* **已禁用**指定是否应禁用 HTTP 公钥锁定。默认为 true。

* **包含-子域**指定是否应包含子域。默认为 false。

* **最大年龄秒**设置 public-key-pins 头的 max-age 指令的值。默认 60 天。

* **仅报告**指定浏览器是否只应报告 PIN 验证失败。默认为 true。

* **报告-URI**指定浏览器应向其报告 PIN 验证失败的 URI。

### \<hpkp\>的父元素

* [headers](#nsa-headers)

## \<pins\>

别针列表

### \<pins\>的子元素

* [pin](#nsa-pin)

## \<pin\>

指定 PIN 时，使用 Base64 编码的 SPKI 指纹作为值，使用加密哈希算法作为属性

### \<pin\>属性

* **算法**加密散列算法。默认值是 SHA256。

### \<pin\>的父元素

* [pins](#nsa-pins)

## \<content-security-policy\>

启用时，将[内容安全策略](https://www.w3.org/TR/CSP2/)头添加到响应中。CSP 是一种机制，Web 应用程序可以利用它来减轻内容注入漏洞，例如跨站点脚本。

### \<content-security-policy\>属性

* **政策指令**用于 content-security-policy 头的安全策略指令，或者如果将 report-only 设置为 true，则使用 content-security-policy-report-only 头。

* **仅报告**设置为 true，以启用 content-security-policy-report-only 头，仅用于报告违反策略的情况。默认为 false。

### \<content-security-policy\>的父元素

* [headers](#nsa-headers)

## \<referrer-policy\>

启用时，将[推荐人政策](https://www.w3.org/TR/referrer-policy/)头添加到响应中。

### \<referrer-policy\>属性

* **政策**referrer-policy 头的策略。默认的“无推荐人”。

### \<referrer-policy\>的父元素

* [headers](#nsa-headers)

## \<feature-policy\>

启用时，将[特征策略](https://wicg.github.io/feature-policy/)头添加到响应中。

### \<feature-policy\>属性

* **政策指令**用于 Feature-Policy 头的安全策略指令。

### \<feature-policy\>的父元素

* [headers](#nsa-headers)

## \<frame-options\>

启用后，将[X-frame-options 标头](https://tools.ietf.org/html/draft-ietf-websec-x-frame-options)添加到响应中，这允许较新的浏览器进行一些安全检查并防止[点击劫持](https://en.wikipedia.org/wiki/Clickjacking)攻击。

### \<frame-options\>属性

* **已禁用**如果禁用，将不包括 X-frame-options 标头。默认为 false。

* **政策**

  * `DENY`该页面不能显示在一个框架中，无论站点试图这样做。这是在指定框架-选项-策略时的默认值。

  * `SAMEORIGIN`页面只能在与页面本身位于同一原点的框架中显示

  换句话说，如果你指定了 deny，那么在从其他站点加载时，在帧中加载页面的尝试不仅会失败，而且在从同一站点加载时也会失败。另一方面，如果你指定了 SameOrigin，则仍然可以在一个框架中使用该页面，只要在一个框架中包含该页面的站点与为该页面提供服务的站点相同。

### \<frame-options\>的父元素

* [headers](#nsa-headers)

## \<permissions-policy\>

将[权限-策略标头](https://w3c.github.io/webappsec-permissions-policy/)添加到响应中。

### \<permissions-policy\>属性

* **政策**要为`Permissions-Policy`头写的策略值

### \<permissions-policy\>的父元素

* [headers](#nsa-headers)

## \<xss-protection\>

将[X-XSS-保护报头](https://blogs.msdn.com/b/ie/archive/2008/07/02/ie8-security-part-iv-the-xss-filter.aspx)添加到响应中，以帮助防止[reflected/type-1 跨站点脚本](https://en.wikipedia.org/wiki/Cross-site_scripting#Non-Persistent)攻击。这绝对是对 XSS 攻击的全面保护！

### \<xss-protection\>属性

* **XSS-保护-禁用**不包括[reflected/type-1 跨站点脚本](https://en.wikipedia.org/wiki/Cross-site_scripting#Non-Persistent)保护的标题。

* **支持 XSS 保护**显式启用或禁用[reflected/type-1 跨站点脚本](https://en.wikipedia.org/wiki/Cross-site_scripting#Non-Persistent)保护。

* **xss-保护模块**当 true 和 xss-protection-enabled 为 true 时，将 mode=block 添加到 header 中。这向浏览器表明，该页面根本不应该加载。当 false 和启用 XSS-Protection-enabled 为 true 时，当检测到反射攻击时，仍将呈现该页面，但将修改响应以防止攻击。请注意，有时有一些绕过此模式的方法，这通常会使阻塞页面变得更理想。

### \<xss-protection\>的父元素

* [headers](#nsa-headers)

## \<content-type-options\>

向响应添加带有 nosniff 值的 x-content-type-options 头。这[禁用 MIME 嗅探功能](https://blogs.msdn.com/b/ie/archive/2008/09/02/ie8-security-part-vi-beta-2-update.aspx)用于 IE8+ 和 Chrome 扩展。

### \<content-type-options\>属性

* **已禁用**指定是否应禁用内容类型选项。默认为 false。

### \<content-type-options\>的父元素

* [headers](#nsa-headers)

## \<header\>

在响应中添加额外的头，需要同时指定名称和值。

### \<header-attributes\>属性

* **标头-Name**标题的`name`。

* **价值**要添加的标头的`value`。

* **参考**引用了`HeaderWriter`接口的自定义实现。

### \<header\>的父元素

* [headers](#nsa-headers)

## \<anonymous\>

将`AnonymousAuthenticationFilter`添加到堆栈，并将`AnonymousAuthenticationProvider`添加到堆栈。如果你正在使用`IS_AUTHENTICATED_ANONYMOUSLY`属性，则需要这样做。

### \<anonymous\>的父元素

* [http](#nsa-http)

### \<anonymous\>属性

* **已启用**通过默认的名称空间设置，匿名“身份验证”功能将自动启用。你可以使用此属性禁用它。

* **授予-授权**应分配给匿名请求的授予权限。这通常用于分配匿名请求的特定角色，随后可以在授权决策中使用该角色。如果未设置，则默认为`ROLE_ANONYMOUS`。

* **钥匙**提供程序和过滤器之间共享的密钥。这通常不需要设置。如果未设置，它将默认为一个安全的随机生成值。这意味着在使用匿名功能时，设置该值可以提高启动时间，因为安全的随机值可能需要一段时间才能生成。

* **用户 Name**应该分配给匿名请求的用户名。这允许标识主体，这对于日志记录和审核可能很重要。如果未设置，则默认为`anonymousUser`。

## \<csrf\>

这个元素将向应用程序添加[跨站点请求伪造者](https://en.wikipedia.org/wiki/Cross-site_request_forgery)保护。它还更新了默认的 RequestCache，以便在身份验证成功时只重放“get”请求。其他信息可以在参考文献的[跨站点请求伪造](../../../features/exploits/csrf.html#csrf)部分中找到。

### \<csrf\>的父元素

* [http](#nsa-http)

### \<csrf\>属性

* **已禁用**可选属性，指定禁用 Spring Security 的 CSRF 保护。默认值为 false（启用了 CSRF 保护）。强烈建议启用 CSRF 保护。

* **Token-Repository-ref**要使用的 csRFTokenRepository。默认值为`HttpSessionCsrfTokenRepository`。

* **request-matcher-ref**用于确定是否应用 CSRF 的请求匹配实例。默认是除了“get”、“trace”、“head”、“options”之外的任何 HTTP 方法。

## \<custom-filter\>

这个元素用于向过滤链添加过滤器。它不会创建任何额外的 bean，而是用于选择`javax.servlet.Filter`类型的 Bean，该类型已在应用程序上下文中定义，并在由 Spring Security 维护的筛选链中的特定位置添加该类型。详细信息可以在[名称空间章节](../../configuration/xml-namespace.html#ns-custom-filters)中找到。

### \<custom-filter\>的父元素

* [http](#nsa-http)

### \<custom-filter\>属性

* **之后**紧随其后的过滤器，该自定义过滤器应放置在链中。该功能将仅由希望将自己的过滤器混合到安全过滤器链中并对标准 Spring 安全过滤器有一定了解的高级用户所需要。过滤器名称映射到特定的 Spring 安全实现过滤器。

* **在此之前**将自定义过滤器置于链中之前的过滤器

* **职务**将自定义过滤器放置在链中的明确位置。如果你正在更换标准过滤器，请使用。

* **参考**定义了对实现`Filter`的 Spring  Bean 的引用。

## \<expression-handler\>

定义启用基于表达式的访问控制时将使用的`SecurityExpressionHandler`实例。如果没有提供，将使用缺省实现（不支持 ACL）。

### \<expression-handler\>的父元素

* [全局方法安全性](method-security.html#nsa-global-method-security)

* [http](#nsa-http)

* [方法-安全性](method-security.html#nsa-method-security)

* [websocket-message-broker](websocket.html#nsa-websocket-message-broker)

### \<expression-handler\>属性

* **参考**定义了对实现`SecurityExpressionHandler`的 Spring  Bean 的引用。

## \<form-login\>

用于将`UsernamePasswordAuthenticationFilter`添加到筛选器堆栈，并将`LoginUrlAuthenticationEntryPoint`添加到应用程序上下文，以按需提供身份验证。这将始终优先于其他名称空间创建的入口点。如果不提供属性，将在 URL“/login”<sup class="footnote">[<a id="_footnoteref_2" class="footnote" href="#_footnotedef_2" title="View footnote.">2</a>]</sup>自动生成登录页面。可以使用[`<form-login>`属性]（#NSA-form-login-attributes）定制行为。

### \<form-login\>的父元素

* [http](#nsa-http)

### \<form-login\>属性

* **总是-使用-默认-目标**如果设置为`true`，则用户将始终从[默认值-目标-URL](#nsa-form-login-default-target-url)给出的值开始，无论他们是如何到达登录页面的。映射到`UsernamePasswordAuthenticationFilter`的`alwaysUseDefaultTargetUrl`属性。默认值为`false`。

* **身份验证-详细信息-源代码-引用**引用将由身份验证过滤器使用的`AuthenticationDetailsSource`

* **身份验证-失败-处理程序-ref**可以用作[身份验证-失败-URL](#nsa-form-login-authentication-failure-url)的替代方案，在身份验证失败后，你可以完全控制导航流。该值应该是应用程序上下文中`AuthenticationFailureHandler` Bean 的名称。

* **身份验证-失败-URL**映射到`authenticationFailureUrl`的`authenticationFailureUrl`属性。定义登录失败时浏览器将重定向到的 URL。默认为`/login?error`，这将由自动登录页面生成器自动处理，用错误消息重新呈现登录页面。

* **认证-成功-处理程序-引用**这可以作为[默认值-目标-URL](#nsa-form-login-default-target-url)和[总是-使用-默认-目标](#nsa-form-login-always-use-default-target)的替代方案，使你在成功的身份验证之后可以完全控制导航流。该值应该是应用程序上下文中`AuthenticationSuccessHandler` Bean 的名称。默认情况下，使用`SavedRequestAwareAuthenticationSuccessHandler`的实现并注入[默认值-目标-URL](#nsa-form-login-default-target-url)。

* **默认值-目标-URL**映射到`defaultTargetUrl`的`UsernamePasswordAuthenticationFilter`属性。如果未设置，默认值为“/”（应用程序根）。如果用户在试图访问安全资源时没有被要求登录，那么在登录后将被带到此 URL，这时他们将被带到最初请求的 URL。

* **登录页面**应该用来呈现登录页面的 URL。映射到`LoginUrlAuthenticationEntryPoint`的`loginFormUrl`属性。默认为“/login”。

* **登录-处理-URL**映射到`filterProcessesUrl`的`UsernamePasswordAuthenticationFilter`属性。默认值为“/login”。

* **密码参数**包含密码的请求参数的名称。默认为“密码”。

* **用户名参数**包含用户名的请求参数的名称。默认为“用户名”。

* **认证-成功-转发-URL**将`ForwardAuthenticationSuccessHandler`映射到`authenticationSuccessHandler`的`UsernamePasswordAuthenticationFilter`属性。

* **认证-失败-转发-URL**将`ForwardAuthenticationFailureHandler`映射到`authenticationFailureHandler`的属性`UsernamePasswordAuthenticationFilter`。

## \<oauth2-login\>

[OAuth2.0 登录](../../oauth2/login/index.html#oauth2login)特性使用 OAuth2.0 和/或 OpenID Connect1.0 提供程序配置身份验证支持。

### \<oauth2-login\>的父元素

* [http](#nsa-http)

### \<oauth2-login\>属性

* **客户端-注册-存储库-ref**引用`ClientRegistrationRepository`。

* **授权-客户端-存储库-ref**引用`OAuth2AuthorizedClientRepository`。

* **授权-客户-服务-参考**引用`OAuth2AuthorizedClientService`。

* **授权-请求-存储库-引用**引用`AuthorizationRequestRepository`。

* **授权-请求-解析器-ref**引用`OAuth2AuthorizationRequestResolver`。

* **access-token-response-client-ref**引用`OAuth2AccessTokenResponseClient`。

* **user-authorities-mapper-ref**引用`GrantedAuthoritiesMapper`。

* **user-service-ref**引用`OAuth2UserService`。

* **OIDC-user-service-ref**对 OpenID Connect 的引用`OAuth2UserService`。

* **登录-处理-URL**过滤器处理身份验证请求的 URI。

* **登录页面**发送用户登录的 URI。

* **认证-成功-处理程序-引用**引用`AuthenticationSuccessHandler`。

* **身份验证-失败-处理程序-ref**引用`AuthenticationFailureHandler`。

* **JWT-解码器-工厂-参考**引用`JwtDecoderFactory`使用的`OidcAuthorizationCodeAuthenticationProvider`。

## \<oauth2-client\>

配置[OAuth2.0 客户端](../../oauth2/client/index.html#oauth2client)支持。

### \<oauth2-client\>的父元素

* [http](#nsa-http)

### \<oauth2-client\>属性

* **客户端-注册-存储库-ref**引用`ClientRegistrationRepository`。

* **授权-客户端-存储库-ref**引用`OAuth2AuthorizedClientRepository`。

* **授权-客户-服务-参考**引用`OAuth2AuthorizedClientService`。

### \<oauth2-client\>的子元素

* [授权-代码-授予](#nsa-authorization-code-grant)

## \<authorization-code-grant\>

配置[OAuth2.0 授权代码授予](../../oauth2/client/authorization-grants.html#oauth2Client-auth-grant-support)。

### \<authorization-code-grant\>的父元素

* [OAuth2-客户端](#nsa-oauth2-client)

### \<authorization-code-grant\>属性

* **授权-请求-存储库-引用**引用`AuthorizationRequestRepository`。

* **授权-请求-解析器-ref**引用`OAuth2AuthorizationRequestResolver`。

* **access-token-response-client-ref**引用`OAuth2AccessTokenResponseClient`。

## \<client-registrations\>

为客户机注册的容器元素（[客户登记](../../oauth2/client/index.html#oauth2Client-client-registration)），使用 OAuth2.0 或 OpenID Connect1.0 提供程序。

### \<client-registrations\>的子元素

* [客户-注册](#nsa-client-registration)

* [provider](#nsa-provider)

## \<client-registration\>

表示在 OAuth2.0 或 OpenID Connect1.0 提供程序中注册的客户端。

### \<client-registration\>的父元素

* [客户-注册](#nsa-client-registrations)

### \<client-registration\>属性

* **注册-ID**唯一标识`ClientRegistration`的 ID。

* **客户端-ID**客户端标识符。

* **客户端-机密**客户端秘密。

* **客户机-身份验证-方法**用于通过提供程序对客户端进行身份验证的方法。支持的值是**客户端 \_Secret\_BASIC**，**客户端 \_Secret\_post**，**Private\_Key\_JWT**，**客户端 \_Secret\_JWT**和**无**[（公众客户）](https://tools.ietf.org/html/rfc6749#section-2.1)。

* **授权-授予类型**OAuth2.0 授权框架定义了四种[授权授予](https://tools.ietf.org/html/rfc6749#section-1.3)类型。支持的值是`authorization_code`，`client_credentials`，`password`，以及扩展授权类型`urn:ietf:params:oauth:grant-type:jwt-bearer`。

* **重定向 URI**客户端注册的重定向 URI，在最终用户对客户端进行了身份验证和授权访问之后，*授权服务器*将最终用户的用户代理重定向到该 URI。

* **范围**客户端在授权请求流期间请求的范围，例如 OpenID、电子邮件或配置文件。

* **客户端-Name**用于客户机的描述性名称。该名称可以在某些场景中使用，例如在自动生成的登录页面中显示客户端的名称时。

* **提供者 ID**对关联提供者的引用。可以引用`<provider>`元素或使用常见的提供者之一（Google，GitHub，Facebook，OKTA）。

## \<provider\>

OAuth2.0 或 OpenID Connect1.0 提供程序的配置信息。

### \<provider\>的父元素

* [客户-注册](#nsa-client-registrations)

### \<provider\>属性

* **提供者 ID**唯一标识提供者的 ID。

* **授权-URI**授权服务器的授权端点 URI。

* **Token-URI**授权服务器的令牌端点 URI。

* **User-info-uri**用于访问经过身份验证的最终用户的声明/属性的 userinfo 端点 URI。

* **用户信息认证方法**向 UserInfo 端点发送访问令牌时使用的身份验证方法。支持的值是**页眉**、**形式**和**查询**。

* **user-info-user-name-属性**在引用最终用户的名称或标识符的 userinfo 响应中返回的属性的名称。

* **JWK-SET-URI**用于从授权服务器检索[JSON Web Key](https://tools.ietf.org/html/rfc7517)集的 URI，其中包含用于验证 ID 令牌的[JSON Web 签名](https://tools.ietf.org/html/rfc7515)的加密密钥，以及可选的 userinfo 响应。

* **发行者-URI**最初使用发现 OpenID Connect 提供者的[配置端点](https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderConfig)或授权服务器的[元数据端点](https://tools.ietf.org/html/rfc8414#section-3)来配置`ClientRegistration`的 URI。

## \<oauth2-resource-server\>

将`BearerTokenAuthenticationFilter`、`BearerTokenAuthenticationEntryPoint`和`BearerTokenAccessDeniedHandler`添加到配置中。此外，必须指定`<jwt>`或`<opaque-token>`。

### \<oauth2-resource-server\>的父元素

* [http](#nsa-http)

### \<oauth2-resource-server\>的子元素

* [jwt](#nsa-jwt)

* [不透明令牌](#nsa-opaque-token)

### \<oauth2-resource-server\>属性

* **身份验证-管理器-解析器-ref**引用`AuthenticationManagerResolver`，它将在请求时解析`AuthenticationManager`

* **承载-令牌-解析器-ref**引用一个`BearerTokenResolver`，它将从请求中检索不记名令牌

* **入口点-参考**引用将处理未授权请求的`AuthenticationEntryPoint`

## \<jwt\>

表示将授权 JWTS 的 OAuth2.0 资源服务器

### \<jwt\>的父元素

* [OAuth2-资源服务器](#nsa-oauth2-resource-server)

### \<jwt\>属性

* **jwt-认证-转换器-ref**引用`Converter<Jwt, AbstractAuthenticationToken>`

* **JWT-decoder-ref**引用`JwtDecoder`。这是一个覆盖`jwk-set-uri`的较大组件

* **JWK-SET-URI**用于从 OAuth2.0 授权服务器加载签名验证密钥的 JWK 设置 URI

## \<opaque-token\>

表示将授权不透明令牌的 OAuth2.0 资源服务器

### \<opaque-token\>的父元素

* [OAuth2-资源服务器](#nsa-oauth2-resource-server)

### \<opaque-token\>属性

* **内省-Ref**引用`OpaqueTokenIntrospector`。这是一个覆盖`introspection-uri`、`client-id`和`client-secret`的较大组件。

* **内省-URI**用于内省不透明令牌细节的内省 URI。应附上`client-id`和`client-secret`。

* **客户端-ID**针对所提供的`introspection-uri`用于客户端身份验证的客户端 ID。

* **客户端-机密**针对所提供的`introspection-uri`用于客户端身份验证的客户端秘密。

## \<http-basic\>

将`BasicAuthenticationFilter`和`BasicAuthenticationEntryPoint`添加到配置中。只有在未启用基于表单的登录时，才将后者用作配置入口点。

### \<http-basic\>的父元素

* [http](#nsa-http)

### \<http-basic\>属性

* **身份验证-详细信息-源代码-引用**引用将由身份验证过滤器使用的`AuthenticationDetailsSource`

* **入口点-参考**设置`AuthenticationEntryPoint`所使用的`BasicAuthenticationFilter`。

## \<http-firewall\>元素

这是一个顶级元素，可用于将`HttpFirewall`的自定义实现注入到由名称空间创建的`FilterChainProxy`中。默认的实现应该适合大多数应用程序。

### \<http-firewall\>属性

* **参考**定义了对实现`HttpFirewall`的 Spring  Bean 的引用。

## \<intercept-url\>

这个元素用于定义应用程序感兴趣的 URL 模式集，并配置它们应该如何处理。它用于构造`FilterInvocationSecurityMetadataSource`所使用的`FilterSecurityInterceptor`。例如，如果需要通过 HTTPS 访问特定的 URL，它还负责配置`ChannelProcessingFilter`。当将指定的模式与传入的请求匹配时，将按照声明元素的顺序进行匹配。因此，最具体的模式应该排在第一位，最一般的模式应该排在最后。

### \<intercept-url\>的父元素

* [过滤器-安全性-元数据-源](#nsa-filter-security-metadata-source)

* [http](#nsa-http)

### \<intercept-url\>属性

* **访问**列出了将存储在`FilterInvocationSecurityMetadataSource`中的用于定义的 URL 模式/方法组合的访问属性。这应该是一个以逗号分隔的安全配置属性列表（例如角色名称）。

* **方法**将与模式和 Servlet 路径（可选）结合使用的 HTTP 方法，以匹配传入请求。如果省略，任何方法都将匹配。如果在使用和不使用方法的情况下指定了相同的模式，则方法特定的匹配将优先。

* **模式**定义 URL 路径的模式。内容将依赖于包含 HTTP 元素的`request-matcher`属性，因此将默认为 Ant 路径语法。

* **request-matcher-ref**对`RequestMatcher`的引用，该引用将用于确定是否使用了`<intercept-url>`。

* **需要-通道**可以是“HTTP”或“HTTPS”，这取决于是否应该分别通过 HTTP 或 HTTPS 访问特定的 URL 模式。或者，当没有偏好时，可以使用值“any”。如果这个属性存在于任何`<intercept-url>`元素上，那么`ChannelProcessingFilter`将被添加到筛选器堆栈中，并将其附加的依赖项添加到应用程序上下文中。

如果添加了`<port-mappings>`配置，这将被`SecureChannelProcessor`和`InsecureChannelProcessor`bean 用于确定用于重定向到 HTTP/HTTPS 的端口。

|   |此属性对[过滤器-安全性-元数据-源](#nsa-filter-security-metadata-source)无效|
|---|----------------------------------------------------------------------------------------------------|

* **servlet-path**将与模式和 HTTP 方法结合使用的 Servlet 路径，以匹配传入请求。此属性仅在[请求匹配程序](#nsa-http-request-matcher)为“mvc”时才适用。另外，该值仅在以下 2 个用例中需要：1）在`ServletContext`中注册的`HttpServlet`中有 2 个或更多的`HttpServlet`具有以`'/'`开头的映射，并且它们是不同的；2）模式以注册的`HttpServlet`路径的相同值开始，排除默认（根）`HttpServlet``'/'`。

|   |此属性对[过滤器-安全性-元数据-源](#nsa-filter-security-metadata-source)无效|
|---|----------------------------------------------------------------------------------------------------|

## \<jee\>

将 J2eepreAuthenticatedProcessingFilter 添加到筛选链中，以提供与容器身份验证的集成。

### \<jee\>的父元素

* [http](#nsa-http)

### \<jee\>属性

* **可映射角色**在传入的 HttpServletRequest 中要查找的逗号分隔的角色列表。

* **user-service-ref**对用户服务（或 UserDetailsService Bean）ID 的引用

## \<logout\>

将`LogoutFilter`添加到筛选器堆栈。这被配置为`SecurityContextLogoutHandler`。

### \<logout\>的父元素

* [http](#nsa-http)

### \<logout\>属性

* **删除-cookies**用户注销时应删除的 cookie 名称的逗号分隔列表。

* **invalidate-session**映射到`invalidateHttpSession`的`SecurityContextLogoutHandler`。默认值为“true”，因此会话将在注销时无效。

* **注销-成功-URL**用户退出后将被带到的目标 URL。默认为 \<form-login-login-page\>/？注销（即/登录？注销）

  设置此属性将注入`SessionManagementFilter`，并使用配置有该属性值的`SimpleRedirectInvalidSessionStrategy`。当提交了无效的会话ID 时，将调用该策略，将其重定向到配置的 URL。

* **注销-URL**将导致注销的 URL（即将由过滤器处理的 URL）。默认为“/注销”。

* **Success-Handler-Ref**可用于提供`LogoutSuccessHandler`的实例，该实例将在注销后被调用以控制导航。

## \<openid-login\>

类似于`<form-login>`并具有相同的属性。`login-processing-url`的默认值是“/login/openid”。将注册`OpenIDAuthenticationFilter`和`OpenIDAuthenticationProvider`。后者需要引用`UserDetailsService`。同样，这可以由`id`指定，使用`user-service-ref`属性，或者将自动位于应用程序上下文中。

### \<openid-login\>的父元素

* [http](#nsa-http)

### \<openid-login\>属性

* **总是-使用-默认-目标**用户登录后是否总是应该重定向到 default-target-url。

* **身份验证-详细信息-源代码-引用**引用验证过滤器将使用的验证详细信息源

* **身份验证-失败-处理程序-ref**引用验证失败处理程序 Bean，该处理程序应用于处理失败的验证请求。不应该与身份验证-失败-URL 组合使用，因为实现应该始终处理到后续目标的导航。

* **身份验证-失败-URL**登录失败页面的 URL。如果没有指定登录失败的 URL， Spring Security 将在/login？Login\_Error 自动创建一个失败的登录 URL 和一个相应的过滤器，以便在请求时呈现该登录失败的 URL。

* **认证-成功-转发-URL**将`ForwardAuthenticationSuccessHandler`映射到`authenticationSuccessHandler`的属性`UsernamePasswordAuthenticationFilter`。

* **认证-失败-转发-URL**将`ForwardAuthenticationFailureHandler`映射到`authenticationFailureHandler`的属性`UsernamePasswordAuthenticationFilter`。

* **认证-成功-处理程序-引用**引用一个验证成功处理了一个成功的验证请求的验证成功处理程序 Bean。不应与[默认值-目标-URL](#nsa-openid-login-default-target-url)（或[总是-使用-默认-目标](#nsa-openid-login-always-use-default-target)）组合使用，因为实现应该始终处理到后续目标的导航

* **默认值-目标-URL**如果用户之前的操作无法恢复，则在身份验证成功后将被重定向到的 URL。如果用户访问登录页面而没有首先请求触发身份验证的安全操作，则通常会发生这种情况。如果未指定，则默认为应用程序的根。

* **登录页面**登录页面的 URL。如果没有指定登录 URL， Spring Security 将在/Login 处自动创建一个登录 URL 和一个相应的过滤器，以便在需要时呈现该登录 URL。

* **登录-处理-URL**登录表单发布到的 URL。如果未指定，则默认为/登录。

* **密码参数**包含密码的请求参数的名称。默认为“密码”。

* **user-service-ref**对用户服务（或 UserDetailsService Bean）ID 的引用

* **用户名参数**包含用户名的请求参数的名称。默认为“用户名”。

### \<openid-login\>的子元素

* [属性交换](#nsa-attribute-exchange)

## \<attribute-exchange\>

`attribute-exchange`元素定义了应该从标识提供程序请求的属性列表。在名称空间配置章节的[OpenID 支持](../../authentication/openid.html#servlet-openid)部分中可以找到一个示例。可以使用多个属性，在这种情况下，每个属性都必须具有`identifier-match`属性，其中包含一个正则表达式，该正则表达式与提供的 OpenID 标识符匹配。这允许从不同的提供商（谷歌、雅虎等）获取不同的属性列表。

### \<attribute-exchange\>的父元素

* [OpenID-登录](#nsa-openid-login)

### \<attribute-exchange\>属性

* **标识符-匹配**当决定在身份验证期间使用哪个属性交换配置时，将与所要求的标识进行比较的正则表达式。

### \<attribute-exchange\>的子元素

* [OpenID-属性](#nsa-openid-attribute)

## \<openid-attribute\>

创建 OpenID AX 时使用的属性[获取请求](https://openid.net/specs/openid-attribute-exchange-1_0.html#fetch_request)

### \<openid-attribute\>的父元素

* [属性交换](#nsa-attribute-exchange)

### \<openid-attribute\>属性

* **计数**指定希望返回的属性的数量。例如，返回 3 封电子邮件。默认值是 1。

* **姓名**指定你希望返回的属性的名称。例如，电子邮件。

* **必需的**指定此属性是否是 OP 所必需的，但如果 OP 不返回该属性，则不会出错。默认值为 false。

* **类型**指定属性类型。例如，[https://axschema.org/contact/email](https://axschema.org/contact/email)。有关有效的属性类型，请参阅你的 OP 文档。

## \<password-management\>

此元素配置密码管理。

### \<password-management\>的父元素

* [http](#nsa-http)

### \<password-management\>属性

* **更改-密码-页面**更改密码页面。默认为“/change-password”。

## \<port-mappings\>

默认情况下，`PortMapperImpl`的实例将被添加到配置中，用于重定向到安全和不安全的 URL。可以选择使用此元素重写该类定义的默认映射。每个子元素`<port-mapping>`定义了一对 HTTPS 端口。默认的映射是 80:443 和 8080:8443。可以在[重定向到 HTTPS](../../exploits/http.html#servlet-http-redirect)中找到覆盖这些内容的示例。

### \<port-mappings\>的父元素

* [http](#nsa-http)

### \<port-mappings\>的子元素

* [端口映射](#nsa-port-mapping)

## \<port-mapping\>

提供一种方法，在强制重定向时将 HTTP 端口映射到 HTTPS 端口。

### \<port-mapping\>的父元素

* [端口映射](#nsa-port-mappings)

### \<port-mapping\>属性

* **HTTP**要使用的 HTTP 端口。

* **HTTPS**要使用的 HTTPS 端口。

## \<remember-me\>

将`RememberMeAuthenticationFilter`添加到堆栈。这进而将被配置为使用`TokenBasedRememberMeServices`、`PersistentTokenBasedRememberMeServices`或根据属性设置实现`RememberMeServices`的用户指定的 Bean。

### \<remember-me\>的父元素

* [http](#nsa-http)

### \<remember-me\>属性

* 如果需要自定义导航，**认证-成功-处理程序-引用**将在`RememberMeAuthenticationFilter`上设置`authenticationSuccessHandler`属性。该值应该是应用程序上下文中`AuthenticationSuccessHandler` Bean 的名称。

* **data-source-ref**对`DataSource` Bean 的引用。如果设置了这个值，将使用`PersistentTokenBasedRememberMeServices`并将其配置为`JdbcTokenRepositoryImpl`实例。

* **Remember-me-parameter**切换 Remember-Me 身份验证的请求参数的名称。默认值为“Remember-me”。映射到`AbstractRememberMeServices`的“参数”属性。

* **Remember-me-cookie**存储用于 Remember-Me 身份验证的令牌的 Cookie 的名称。默认值为“Remember-me”。映射到`AbstractRememberMeServices`的“cookiename”属性。

* **钥匙**映射到`AbstractRememberMeServices`的“键”属性。应该设置为唯一值，以确保 Remember-Me cookies 仅在一个应用程序<sup class="footnote">[<a id="_footnoteref_3" class="footnote" href="#_footnotedef_3" title="View footnote.">3</a>]</sup>内有效。如果没有设置这个值，就会生成一个安全的随机值。由于生成安全的随机值可能需要一段时间，所以在使用 Remember-Me 功能时，显式地设置该值可以帮助提高启动时间。

* **服务-别名**将内部定义的`RememberMeServices`导出为 Bean 别名，允许它被应用程序上下文中的其他 bean 使用。

* **服务-参考**允许对过滤器将使用的`RememberMeServices`实现进行完全控制。在实现该接口的应用程序上下文中，值应该是 Bean 中的[gt r=“669”/>。如果正在使用注销过滤器，也应该实现`LogoutHandler`。

* **Token-Repository-ref**配置了`PersistentTokenBasedRememberMeServices`，但允许使用自定义的`PersistentTokenRepository` Bean。

* **令牌-有效性-秒**映射到`tokenValiditySeconds`的`AbstractRememberMeServices`属性。指定 rememe-me cookie 的有效时间（以秒为单位）。默认情况下，它的有效期为 14 天。

* **使用安全 cookie**建议 Remember-Me Cookie 仅通过 HTTPS 提交，因此应标记为“Secure”。默认情况下，如果发出登录请求的连接是安全的（应该是安全的），则将使用安全的 cookie。如果将此属性设置为`false`，则不会使用安全 cookie。将其设置为`true`将始终设置 cookie 上的安全标志。此属性映射到`AbstractRememberMeServices`的`useSecureCookie`属性。

* **user-service-ref**Remember-Me 服务实现需要访问`UserDetailsService`，因此必须在应用程序上下文中定义一个。如果只有一个，它将被命名空间配置自动选择和使用。如果有多个实例，则可以使用此属性显式地指定 Bean `id`。

## \<request-cache\>元素

设置`RequestCache`实例，该实例将被`ExceptionTranslationFilter`用于在调用`AuthenticationEntryPoint`之前存储请求信息。

### \<request-cache\>的父元素

* [http](#nsa-http)

### \<request-cache\>属性

* **参考**定义了对 Spring  Bean 的引用，即`RequestCache`。

## \<session-management\>

会话-管理相关的功能是通过向过滤器堆栈添加`SessionManagementFilter`来实现的。

### \<session-management\>的父元素

* [http](#nsa-http)

### \<session-management\>属性

* **invalid-session-url**设置此属性将为`SessionManagementFilter`注入一个配置有该属性值的`SimpleRedirectInvalidSessionStrategy`。当提交了无效的会话ID 时，将调用该策略，将其重定向到配置的 URL。

* **invalid-session-url**允许注入 SessionManagementFilter 使用的 InvalidSessionStrategy 实例。可以使用这个属性，也可以使用`invalid-session-url`属性，但不能同时使用这两个属性。

* **session-authentication-error-url**定义了错误页的 URL，当 SessionAuthenticationStrategy 引发异常时，应该显示错误页的 URL。如果未设置，将向客户端返回未经授权的（401）错误代码。请注意，如果错误发生在基于表单的登录过程中，则此属性不适用，在此过程中，验证失败的 URL 将优先处理。

* **session-authentication-strategy-ref**允许注入由 SessionManagementFilter 使用的 SessionAuthenticationStrategy 实例

* **session-fixation-protection**指示在用户进行身份验证时如何应用会话固定保护。如果设置为“无”，则不会应用任何保护。“NewSession”将创建一个新的空会话，其中只迁移了 Spring 与安全相关的属性。“migratesession”将创建一个新的会话并将所有会话属性复制到新的会话。在 Servlet 3.1（Java EE7）和较新的容器中，指定“ChangeSessionID”将保留现有的会话并使用容器提供的会话固定保护（HttpServletRequest#ChangeSessionID（））。在 Servlet 3.1 和较新的容器中，默认为“ChangeSessionID”，在较旧的容器中为“MigrateSession”。如果在较旧的容器中使用了“changesessionID”，则抛出一个异常。

  如果会话固定保护被启用，则`SessionManagementFilter`被注入适当配置的`DefaultSessionAuthenticationStrategy`。有关此类的更多详细信息，请参见 Javadoc。

### \<session-management\>的子元素

* [并发控制](#nsa-concurrency-control)

## \<concurrency-control\>

会话增加了对并发控制的支持，允许对用户可以拥有的活动会话的数量进行限制。将创建一个`ConcurrentSessionFilter`，并将`ConcurrentSessionControlAuthenticationStrategy`与`SessionManagementFilter`一起使用。如果已经声明了`form-login`元素，那么策略对象也将被注入到创建的身份验证筛选器中。将创建一个`SessionRegistry`的实例（一个`SessionRegistryImpl`实例，除非用户希望使用自定义 Bean），以供该策略使用。

### \<concurrency-control\>的父元素

* [session-management](#nsa-session-management)

### \<concurrency-control\>属性

* 如果将**超过最大值时的错误**设置为“true”，则当用户尝试超过允许的最大会话次数时，将引发`SessionAuthenticationException`。默认的行为是使原始的会话过期。

* **已过期的 URL**如果用户试图使用会话，则将被重定向到的 URL，该会话已被并发会话控制器“过期”，因为该用户已超过了允许的会话数量，并已在其他地方再次登录。应该设置，除非设置`exception-if-maximum-exceeded`。如果没有提供任何值，则只需将过期消息直接写回响应。

* **已过期的 URL**允许注入 ConcurrentSessionFilter 使用的 ExpiredSessionStrategy 实例

* **最大会话**映射到`maximumSessions`的`ConcurrentSessionControlAuthenticationStrategy`属性。指定`-1`作为支持无限会话的值。

* **session-registry-alias**在你自己的 bean 或管理接口中使用对内部会话注册表的引用也很有用。你可以使用`session-registry-alias`属性公开内部 Bean，从而为它提供一个可以在配置的其他地方使用的名称。

* **session-registry-ref**用户可以使用`session-registry-ref`属性提供他们自己的`SessionRegistry`实现。会话其他并发控制 bean 将被连接起来以使用它。

## \<x509\>

添加对 X.509 身份验证的支持。一个`X509AuthenticationFilter`将被添加到堆栈中，并且将创建一个`Http403ForbiddenEntryPoint` Bean。后者仅在不使用其他身份验证机制的情况下使用（其唯一功能是返回 HTTP403 错误代码）。还将创建一个`PreAuthenticatedAuthenticationProvider`，它将用户权限的加载委托给`UserDetailsService`。

### \<x509\>的父元素

* [http](#nsa-http)

### \<x509\>属性

* **身份验证-详细信息-源代码-引用**对`AuthenticationDetailsSource`的引用

* **主体-主体-正则表达式**定义了一个正则表达式，它将用于从证书中提取用户名（用于`UserDetailsService`）。

* 在配置了多个实例的情况下，**user-service-ref**允许在 X.509 中使用特定的`UserDetailsService`。如果没有设置，将尝试自动定位一个合适的实例并使用它。

## \<filter-chain-map\>

用于显式地配置带有 filterchainmap 的 filterchainproxy 实例

### \<filter-chain-map\>属性

* **请求匹配程序**定义了用于匹配传入请求的策略。目前的选项是“ Ant”（用于 Ant 路径模式），“regex”用于正则表达式，“ciregex”用于不区分大小写的正则表达式。

### \<filter-chain-map\>的子元素

* [过滤链](#nsa-filter-chain)

## \<filter-chain\>

内用于定义特定的 URL 模式和应用于匹配该模式的 URL 的筛选器列表。当为了配置 FilterChainProxy 而将多个筛选链元素组合在一个列表中时，最特定的模式必须放在列表的顶部，而大多数一般的模式则放在底部。

### \<filter-chain\>的父元素

* [filter-chain-map](#nsa-filter-chain-map)

### \<filter-chain\>属性

* **过滤器**对实现`Filter`的 Spring bean 的引用的逗号分隔列表。值“none”表示对于这个`FilterChain`应该使用 no`Filter`。

* **模式**结合[请求匹配程序](#nsa-filter-chain-map-request-matcher)创建请求匹配器的模式

* **request-matcher-ref**对`RequestMatcher`的引用，该引用将用于确定是否应该调用来自`filters`属性的任何`Filter`。

## \<filter-security-metadata-source\>

用于显式地配置一个 FilterSecurityMetaDataSource Bean，以便与 FilterSecurityInterceptor 一起使用。通常仅在显式配置 FilterChainProxy 时才需要，而不是使用 \<http\>元素。使用的截取 URL 元素应该只包含模式、方法和访问属性。任何其他操作都会导致配置错误。

### \<filter-security-metadata-source\>属性

* **身份证** Bean 标识符，用于在上下文的其他地方引用 Bean。

* **请求匹配程序**定义了用于匹配传入请求的策略。当前的选项是“ Ant”（用于 Ant 路径模式），“regex”用于正则表达式，“ciregex”用于不区分大小写的正则表达式。

* **使用表达式**允许在 \<intercept-url\>元素中的“access”属性中使用表达式，而不是使用传统的配置属性列表。默认值为“true”。如果启用，每个属性应该包含一个布尔表达式。如果表达式计算为“true”，则将授予访问权限。

### \<filter-security-metadata-source\>的子元素

* [截取-URL](#nsa-intercept-url)

---

[1](#_footnoteref_1)。参见 Xref: Servlet/configuration/xml-namespace.ADOC#ns-web-xml[介绍性章节]

[2](#_footnoteref_2)。此功能实际上只是为了方便而提供的，并不是用于生产（在生产过程中，将选择一种视图技术，并可用于呈现定制的登录页面）。类`DefaultLoginPageGeneratingFilter`负责呈现登录页面，并在需要时为普通表单登录和/或 OpenID 提供登录表单。

[3](#_footnoteref_3)。这不会影响`PersistentTokenBasedRememberMeServices`的使用，在这里，令牌存储在服务器端。

[认证服务](authentication-manager.html)[方法安全性](method-security.html)

