Web 应用安全

<debug>

启用 Spring Security 调试基础设施。这将提供人类可读的(多行)调试信息,用于监控进入安全过滤器的请求。这可能包含敏感信息,例如请求参数或标头,并且只应在开发环境中使用。

<http>

如果在应用程序中使用<http> 元素,则会创建一个名为“springSecurityFilterChain”的FilterChainProxy bean,并且元素中的配置用于在FilterChainProxy中构建过滤器链。从 Spring Security 3.1 开始,可以使用附加的http 元素添加额外的过滤器链[1](有关如何设置从web.xml进行映射的方法)。某些核心过滤器始终在过滤器链中创建,而其他过滤器将根据存在的属性和子元素添加到堆栈中。标准过滤器的顺序是固定的(请参阅命名空间介绍中的过滤器顺序表),消除了以前框架版本中用户必须在FilterChainProxy bean中显式配置过滤器链时常见的错误来源。当然,如果需要完全控制配置,您仍然可以这样做。

所有需要引用AuthenticationManager的过滤器都将自动注入命名空间配置创建的内部实例。

每个<http> 命名空间块始终创建一个SecurityContextPersistenceFilter、一个ExceptionTranslationFilter 和一个FilterSecurityInterceptor。这些是固定的,不能被替代。

<http> 属性

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

  • use-authorization-manager 使用 AuthorizationManager API 代替 SecurityMetadataSource(默认为 true)

  • access-decision-manager-ref 使用此 AuthorizationManager 代替从 <intercept-url> 元素派生一个

  • access-decision-manager-ref 可选属性,指定应用于授权 HTTP 请求的AccessDecisionManager实现的 ID。默认情况下,使用带有RoleVoterAuthenticatedVoterAffirmativeBased实现。

  • 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 不会创建会话,并且会忽略用于获取 Spring Authentication 的会话。

  • disable-url-rewriting 防止将会话 ID 附加到应用程序中的 URL。如果此属性设置为true,则客户端必须使用 Cookie。默认为true

  • entry-point-ref 通常,使用的AuthenticationEntryPoint将根据已配置的身份验证机制进行设置。此属性允许通过定义一个自定义的AuthenticationEntryPoint bean 来覆盖此行为,该 bean 将启动身份验证过程。

  • jaas-api-provision 如果可用,则以从JaasAuthenticationToken(通过向堆栈添加JaasApiIntegrationFilter bean 来实现)获取的Subject运行请求。默认为false

  • name bean 标识符,用于在上下文中的其他地方引用该 bean。

  • once-per-request 对应于FilterSecurityInterceptorobserveOncePerRequest属性。默认为false

  • filter-all-dispatcher-types 对应于AuthorizationFiltershouldFilterAllDispatcherTypes属性。当use-authorization-manager=false时无效。默认为true

  • patternhttp元素定义模式控制将通过其定义的过滤器列表过滤的请求。解释取决于已配置的request-matcher。如果没有定义模式,则将匹配所有请求,因此应首先声明最具体的模式。

  • realm 设置用于基本身份验证(如果启用)的领域名称。对应于BasicAuthenticationEntryPoint上的realmName属性。

  • request-matcher 定义FilterChainProxyintercept-url创建的 bean 中使用的RequestMatcher策略,以匹配传入的请求。当前的选项包括mvcantregexciRegex,分别用于 Spring MVC、ant、正则表达式和不区分大小写的正则表达式。使用其patternmethodservlet-path属性为每个intercept-url元素创建一个单独的实例。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注入SecurityContextPersistenceFilterSecurityContextHolderFilterBasicAuthenticationFilterUsernamePasswordAuthenticationFilterExceptionTranslationFilterLogoutFilter等。

  • security-context-explicit-save 如果为 true,则使用SecurityContextHolderFilter而不是SecurityContextPersistenceFilter。需要显式保存。

  • security-context-repository-ref 允许将自定义SecurityContextRepository注入SecurityContextPersistenceFilter

  • servlet-api-provision 提供HttpServletRequest安全方法(例如isUserInRole()getPrincipal())的版本,这些方法是通过向堆栈添加SecurityContextHolderAwareRequestFilter bean 来实现的。默认为true

<access-denied-handler>

此元素允许您使用error-page属性设置ExceptionTranslationFilter使用的默认AccessDeniedHandlererrorPage属性,或者使用ref属性提供您自己的实现。这在关于ExceptionTranslationFilter的部分中进行了更详细的讨论。

<access-denied-handler>的父元素

<access-denied-handler>属性

  • error-page 如果已认证用户请求他们无权访问的页面,则将其重定向到的访问被拒页面。

  • ref 定义对类型为AccessDeniedHandler的 Spring bean 的引用。

<cors>

此元素允许配置CorsFilter。如果没有指定CorsFilterCorsConfigurationSource并且类路径中存在 Spring MVC,则将HandlerMappingIntrospector用作CorsConfigurationSource

<cors>属性

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

  • ref 指定CorsFilter的 bean 名称的可选属性。

  • cors-configuration-source-ref 指定要注入到 XML 命名空间创建的CorsFilter中的CorsConfigurationSource的 bean 名称的可选属性。

<cors>的父元素

<headers>

此元素允许配置要与响应一起发送的其他(安全)标头。它可以轻松配置多个标头,并且还允许通过header元素设置自定义标头。更多信息,请参见参考中的安全标头部分。

  • Cache-ControlPragmaExpires - 可以使用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 类型嗅探到声明的 content-type 之外。这在下载扩展程序时也适用于 Google Chrome。

  • Public-Key-PinningPublic-Key-Pinning-Report-Only - 可以使用hpkp元素设置。这允许 HTTPS 网站抵御使用错误颁发或其他欺诈证书的攻击者的模仿。

  • Content-Security-PolicyContent-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(启用响应头)。

<headers> 的父元素

<cache-control>

添加 Cache-ControlPragmaExpires 头,以确保浏览器不缓存您的安全页面。

<cache-control> 属性

  • disabled 指定是否禁用缓存控制。默认为 false。

<cache-control> 的父元素

<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。

<hsts> 的父元素

<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。

<hpkp> 的父元素

<pins>

引脚列表

<pins> 的子元素

<pin>

引脚使用 base64 编码的 SPKI 指纹作为值,并将加密哈希算法作为属性指定。

<pin> 属性

  • algorithm 加密哈希算法。默认为 SHA256。

<pin> 的父元素

<content-security-policy>

启用后,会向响应中添加 内容安全策略 (CSP) 头。CSP 是一种 Web 应用程序可以利用的机制,用于减轻内容注入漏洞,例如跨站点脚本 (XSS)。

<content-security-policy> 属性

  • policy-directives 内容安全策略标头的安全策略指令,如果 report-only 设置为 true,则使用内容安全策略报告仅标头。

  • report-only 设置为 true,以启用内容安全策略报告仅标头,仅用于报告策略违规。默认为 false。

<content-security-policy> 的父元素

<referrer-policy>

启用后,会向响应中添加 Referrer Policy 头。

<referrer-policy> 属性

  • policy Referrer-Policy 标头的策略。默认为“no-referrer”。

<referrer-policy> 的父元素

<feature-policy>

启用后,会向响应中添加 功能策略 头。

<feature-policy> 属性

  • policy-directives 功能策略标头的安全策略指令。

<feature-policy> 的父元素

<frame-options>

启用后,会向响应中添加 X-Frame-Options 头,这允许较新的浏览器执行一些安全检查并防止 点击劫持 攻击。

<frame-options> 属性

  • disabled 如果禁用,则不会包含 X-Frame-Options 头。默认为 false。

  • policy

    • DENY 页面不能显示在框架中,无论尝试执行此操作的站点如何。这是指定 frame-options-policy 时的默认值。

    • SAMEORIGIN 页面只能显示在与页面本身具有相同来源的框架中。

    换句话说,如果您指定 DENY,那么不仅从其他站点加载页面到框架中的尝试会失败,从同一站点加载页面到框架中的尝试也会失败。另一方面,如果您指定 SAMEORIGIN,只要包含它的站点与提供页面的站点相同,您仍然可以在框架中使用该页面。

<frame-options> 的父元素

<permissions-policy>

向响应中添加 Permissions-Policy 头

<permissions-policy> 属性

  • policyPermissions-Policy 头写入的策略值。

<permissions-policy> 的父元素

<xss-protection>

向响应中添加 X-XSS-Protection 头 以帮助防止 反射/类型 1 跨站点脚本 (XSS) 攻击。这绝不是对 XSS 攻击的全面保护!

<xss-protection> 属性

<xss-protection> 的父元素

<content-type-options>

使用 nosniff 值向响应中添加 X-Content-Type-Options 标头。这 禁用 IE8+ 和 Chrome 扩展程序的 MIME 检测

<content-type-options> 属性

  • disabled 指定是否禁用内容类型选项。默认为 false。

<content-type-options> 的父元素

<cross-origin-embedder-policy>

启用后,会向响应中添加 Cross-Origin-Embedder-Policy 头。

<cross-origin-embedder-policy> 属性
  • policy Cross-Origin-Embedder-Policy 标头的策略。

<cross-origin-embedder-policy> 的父元素

<cross-origin-opener-policy>

启用后,会向响应中添加 Cross-Origin-Opener-Policy 头。

<cross-origin-opener-policy> 属性
  • policy Cross-Origin-Opener-Policy 标头的策略。

<cross-origin-opener-policy> 的父元素

<cross-origin-resource-policy>

启用后,会向响应中添加 Cross-Origin-Resource-Policy 头。

<cross-origin-resource-policy> 属性
  • policy Cross-Origin-Resource-Policy 标头的策略。

<cross-origin-resource-policy> 的父元素

<header>

向响应中添加其他标头,需要同时指定名称和值。

<header> 属性

  • header-name 标头的名称

  • value 要添加的标头的

  • refHeaderWriter 接口的自定义实现的引用。

<header> 的父元素

<anonymous>

向堆栈中添加 AnonymousAuthenticationFilterAnonymousAuthenticationProvider。如果您使用 IS_AUTHENTICATED_ANONYMOUSLY 属性,则需要此项。

<anonymous> 的父元素

<anonymous> 属性

  • enabled 使用默认命名空间设置时,匿名“身份验证”功能会自动启用。您可以使用此属性禁用它。

  • granted-authority 应分配给匿名请求的授权权限。通常,这用于向匿名请求分配特定角色,这些角色随后可用于授权决策。如果未设置,则默认为 ROLE_ANONYMOUS

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

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

<csrf>

此元素会向应用程序添加 跨站点请求伪造 (CSRF) 保护。它还更新默认的 RequestCache,仅在成功身份验证后重播“GET”请求。更多信息可在参考的 跨站点请求伪造 (CSRF) 部分找到。

<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 维持的过滤器链中的特定位置。完整详细信息可在命名空间章节中找到。

<custom-filter> 的父元素

<custom-filter> 属性

  • after 自定义过滤器在链中应放置在其后的过滤器。此功能仅适用于希望将其自身的过滤器混合到安全过滤器链中并了解标准 Spring Security 过滤器的用户。过滤器名称映射到特定的 Spring Security 实现过滤器。

  • before 自定义过滤器在链中应放置在其前的过滤器。

  • position 自定义过滤器在链中应放置的明确位置。如果要替换标准过滤器,请使用此属性。

  • ref 定义对实现Filter的 Spring Bean 的引用。

<expression-handler>

定义如果启用基于表达式的访问控制将使用的SecurityExpressionHandler实例。如果未提供,则将使用默认实现(无 ACL 支持)。

<expression-handler> 属性

  • ref 定义对实现SecurityExpressionHandler的 Spring Bean 的引用。

<form-login>

用于向过滤器堆栈添加UsernamePasswordAuthenticationFilter,并向应用程序上下文添加LoginUrlAuthenticationEntryPoint,以便按需提供身份验证。这将始终优先于其他命名空间创建的入口点。如果未提供任何属性,则将在 URL "/login" 自动生成登录页面[2] 可以使用<form-login>属性自定义行为。

<form-login> 的父元素

<form-login> 属性

  • always-use-default-target 如果设置为true,则无论用户如何到达登录页面,用户都将始终从default-target-url给定的值开始。映射到UsernamePasswordAuthenticationFilteralwaysUseDefaultTargetUrl属性。默认值为false

  • authentication-details-source-ref 身份验证过滤器将使用的AuthenticationDetailsSource的引用。

  • authentication-failure-handler-ref 可用作authentication-failure-url的替代方案,让您完全控制身份验证失败后的导航流程。该值应为应用程序上下文中AuthenticationFailureHandler Bean 的名称。

  • authentication-failure-url 映射到UsernamePasswordAuthenticationFilterauthenticationFailureUrl属性。定义登录失败时浏览器将重定向到的 URL。默认为/login?error,这将由自动登录页面生成器自动处理,并重新呈现带有错误消息的登录页面。

  • authentication-success-handler-ref 这可以用作default-target-urlalways-use-default-target的替代方案,让您完全控制成功身份验证后的导航流程。该值应为应用程序上下文中AuthenticationSuccessHandler Bean 的名称。默认情况下,使用SavedRequestAwareAuthenticationSuccessHandler的实现,并注入default-target-url

  • default-target-url 映射到UsernamePasswordAuthenticationFilterdefaultTargetUrl属性。如果未设置,则默认值为 "/"(应用程序根目录)。登录后,用户将转到此 URL,前提是他们在尝试访问受保护的资源时未被要求登录,在这种情况下,他们将转到最初请求的 URL。

  • login-page 应用于呈现登录页面的 URL。映射到LoginUrlAuthenticationEntryPointloginFormUrl属性。默认为"/login"。

  • login-processing-url 映射到UsernamePasswordAuthenticationFilterfilterProcessesUrl属性。默认值为"/login"。

  • password-parameter 包含密码的请求参数的名称。默认为"password"。

  • username-parameter 包含用户名请求参数的名称。默认为"username"。

  • authentication-success-forward-urlForwardAuthenticationSuccessHandler映射到UsernamePasswordAuthenticationFilterauthenticationSuccessHandler属性。

  • authentication-failure-forward-urlForwardAuthenticationFailureHandler映射到UsernamePasswordAuthenticationFilterauthenticationFailureHandler属性。

<oauth2-login>

OAuth 2.0 登录功能使用 OAuth 2.0 和/或 OpenID Connect 1.0 提供程序配置身份验证支持。

<oauth2-login> 的父元素

<oauth2-login> 属性

  • client-registration-repository-refClientRegistrationRepository的引用。

  • authorized-client-repository-refOAuth2AuthorizedClientRepository的引用。

  • authorized-client-service-refOAuth2AuthorizedClientService的引用。

  • authorization-request-repository-refAuthorizationRequestRepository的引用。

  • authorization-request-resolver-refOAuth2AuthorizationRequestResolver的引用。

  • authorization-redirect-strategy-ref 对授权RedirectStrategy的引用。

  • access-token-response-client-refOAuth2AccessTokenResponseClient的引用。

  • user-authorities-mapper-refGrantedAuthoritiesMapper的引用。

  • user-service-refOAuth2UserService的引用。

  • oidc-user-service-ref 对 OpenID Connect OAuth2UserService的引用。

  • login-processing-url 过滤器处理身份验证请求的 URI。

  • login-page 发送用户登录的 URI。

  • authentication-success-handler-refAuthenticationSuccessHandler的引用。

  • authentication-failure-handler-refAuthenticationFailureHandler的引用。

  • jwt-decoder-factory-ref OidcAuthorizationCodeAuthenticationProvider使用的JwtDecoderFactory的引用。

<oauth2-client>

配置OAuth 2.0 客户端支持。

<oauth2-client> 的父元素

<oauth2-client> 属性

  • client-registration-repository-refClientRegistrationRepository的引用。

  • authorized-client-repository-refOAuth2AuthorizedClientRepository的引用。

  • authorized-client-service-refOAuth2AuthorizedClientService的引用。

<oauth2-client> 的子元素

<authorization-code-grant>

<authorization-code-grant> 的父元素

<authorization-code-grant> 属性

  • authorization-request-repository-refAuthorizationRequestRepository的引用。

  • authorization-redirect-strategy-ref 对授权RedirectStrategy的引用。

  • authorization-request-resolver-refOAuth2AuthorizationRequestResolver的引用。

  • access-token-response-client-refOAuth2AccessTokenResponseClient的引用。

<client-registrations>

已注册客户端的容器元素(ClientRegistration),带有 OAuth 2.0 或 OpenID Connect 1.0 提供程序。

<client-registrations> 的子元素

<client-registration>

表示已向 OAuth 2.0 或 OpenID Connect 1.0 提供程序注册的客户端。

<client-registration> 的父元素

<client-registration> 属性

  • registration-id 唯一标识ClientRegistration的 ID。

  • client-id 客户端标识符。

  • client-secret 客户端密钥。

  • client-authentication-method 用于使用提供程序对客户端进行身份验证的方法。支持的值为client_secret_basicclient_secret_postprivate_key_jwtclient_secret_jwtnone (公共客户端)

  • authorization-grant-type OAuth 2.0 授权框架定义了四种授权授予类型。支持的值为authorization_codeclient_credentialspassword以及扩展授予类型urn:ietf:params:oauth:grant-type:jwt-bearer

  • 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> 属性

  • provider-id 唯一标识提供程序的 ID。

  • authorization-uri 授权服务器的授权端点 URI。

  • token-uri 授权服务器的令牌端点 URI。

  • user-info-uri 用于访问已认证最终用户的声明/属性的用户信息端点 URI。

  • user-info-authentication-method 将访问令牌发送到用户信息端点时使用的身份验证方法。支持的值为headerformquery

  • user-info-user-name-attribute 用户信息响应中引用的最终用户的名称或标识符的属性名称。

  • issuer-uri 用于使用 OpenID Connect 提供程序的配置端点或授权服务器的元数据端点发现来初始配置ClientRegistration的 URI。

<oauth2-resource-server>

向配置中添加BearerTokenAuthenticationFilterBearerTokenAuthenticationEntryPointBearerTokenAccessDeniedHandler。此外,必须指定<jwt><opaque-token>

<oauth2-resource-server> 的父元素

<oauth2-resource-server> 的子元素

<oauth2-resource-server> 属性

  • authentication-manager-resolver-ref 指向一个AuthenticationManagerResolver,它将在请求时解析AuthenticationManager

  • bearer-token-resolver-ref 指向一个BearerTokenResolver,它将从请求中检索Bearer令牌

  • entry-point-ref 指向一个AuthenticationEntryPoint,它将处理未授权的请求

<jwt>

表示一个OAuth 2.0资源服务器,它将授权JWT。

<jwt> 的父元素

<jwt> 属性

  • jwt-authentication-converter-ref 指向一个Converter<Jwt, AbstractAuthenticationToken>

  • jwt-decoder-ref 指向一个JwtDecoder。这是一个更大的组件,它会覆盖jwk-set-uri

  • jwk-set-uri 用于从OAuth 2.0授权服务器加载签名验证密钥的JWK Set Uri

<opaque-token>

表示一个OAuth 2.0资源服务器,它将授权不透明令牌。

<opaque-token> 的父元素

<opaque-token> 属性

  • introspector-ref 指向一个OpaqueTokenIntrospector。这是一个更大的组件,它会覆盖introspection-uriclient-idclient-secret

  • introspection-uri 用于内省不透明令牌详细信息的内省Uri。应与client-idclient-secret一起使用。

  • client-id 用于针对提供的introspection-uri进行客户端身份验证的客户端ID。

  • client-secret 用于针对提供的introspection-uri进行客户端身份验证的客户端密钥。

  • authentication-converter-ref 指向一个OpaqueTokenAuthenticationConverter。负责将成功的内省结果转换为Authentication实例。

<relying-party-registrations>

已注册的依赖方(ClientRegistration)的容器元素,与SAML 2.0身份提供者一起使用。

<relying-party-registrations> 属性

  • id 唯一标识RelyingPartyRegistrationRepository的ID。

<relying-party-registrations> 的子元素

<relying-party-registration>

表示已向SAML 2.0身份提供者注册的依赖方。

<relying-party-registration> 的父元素

<relying-party-registration> 属性

  • registration-id 唯一标识RelyingPartyRegistration的ID。

  • metadata-location 声明方元数据位置。

  • assertion-consumer-service-location AssertionConsumerService 位置。等同于在依赖方的<SPSSODescriptor>中找到的<AssertionConsumerService Location="…​"/>中的值。

  • assertion-consumer-service-binding AssertionConsumerService 绑定。等同于在依赖方的<SPSSODescriptor>中找到的<AssertionConsumerService Binding="…​"/>中的值。支持的值为POSTREDIRECT

  • 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="…​"/>中的值。支持的值为POSTREDIRECT

  • asserting-party-id 对关联的声明方的引用。必须引用<asserting-party>元素。

<relying-party-registration> 的子元素

<decryption-credential>

与依赖方关联的解密凭据。

<decryption-credential> 的父元素

<decryption-credential> 属性

  • certificate-location 获取证书的位置

  • private-key-location 获取依赖方私钥的位置

<signing-credential>

与依赖方关联的签名凭据。

<verification-credential> 的父元素

<verification-credential> 属性

  • certificate-location 获取此证书的位置

  • private-key-location 获取依赖方私钥的位置

<asserting-party>

SAML 2.0声明方的配置信息。

<asserting-party> 的父元素

<asserting-party> 属性

  • asserting-party-id 唯一标识声明方的ID。

  • entity-id 声明方的EntityID

  • want-authn-requests-signed WantAuthnRequestsSigned设置,指示声明方首选依赖方在发送之前应签署AuthnRequest

  • single-sign-on-service-binding SingleSignOnService 绑定。支持的值为POSTREDIRECT

  • 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="…​"/>中的值。支持的值为POSTREDIRECT

<asserting-party> 的子元素

<encryption-credential>

与声明方关联的加密凭据。

<encryption-credential> 的父元素

<encryption-credential> 属性

  • certificate-location 获取证书的位置

  • private-key-location 获取依赖方私钥的位置

<verification-credential>

与声明方关联的验证凭据。

<verification-credential> 的父元素

<verification-credential> 属性

  • certificate-location 获取此证书的位置

  • private-key-location 获取依赖方私钥的位置

<http-basic>

向配置中添加BasicAuthenticationFilterBasicAuthenticationEntryPoint。后者仅在未启用基于表单的登录时才用作配置入口点。

<http-basic> 的父元素

<http-basic> 属性

  • authentication-details-source-ref 身份验证过滤器将使用的AuthenticationDetailsSource的引用。

  • entry-point-ref 设置BasicAuthenticationFilter使用的AuthenticationEntryPoint

<http-firewall> 元素

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

<http-firewall> 属性

  • ref 定义对实现HttpFirewall的Spring bean的引用。

<intercept-url>

此元素用于定义应用程序感兴趣的一组URL模式,以及配置如何处理这些模式。它用于构建FilterSecurityInterceptor使用的FilterInvocationSecurityMetadataSource。如果需要通过HTTPS访问特定URL(例如),它还负责配置ChannelProcessingFilter。在将指定的模式与传入请求匹配时,匹配按声明元素的顺序进行。因此,最具体的模式应该放在前面,最通用的模式应该放在后面。

<intercept-url> 的父元素

<intercept-url> 属性

  • access 列出将为定义的URL模式/方法组合存储在FilterInvocationSecurityMetadataSource中的访问属性。这应该是安全配置属性(例如角色名称)的逗号分隔列表。

  • method 将与模式和servlet路径(可选)结合使用以匹配传入请求的HTTP方法。如果省略,则任何方法都将匹配。如果使用和不使用方法指定了相同的模式,则特定于方法的匹配将优先。

  • pattern 定义URL路径的模式。内容将取决于包含http元素中的request-matcher属性,因此如果Spring MVC在类路径中,则默认为MVC匹配器。

  • request-matcher-ref 对将用于确定是否使用此<intercept-url>RequestMatcher的引用。

  • requires-channel 可设置为 "http" 或 "https",分别表示特定 URL 模式应通过 HTTP 或 HTTPS 访问。或者,当没有偏好时,可以使用值 "any"。如果此属性存在于任何<intercept-url> 元素中,则会将一个ChannelProcessingFilter添加到过滤器堆栈中,并将其附加依赖项添加到应用程序上下文。

如果添加了<port-mappings>配置,则SecureChannelProcessorInsecureChannelProcessor bean 将使用此配置来确定用于重定向到 HTTP/HTTPS 的端口。

此属性对于filter-security-metadata-source无效。
  • servlet-path 将与模式和 HTTP 方法结合使用以匹配传入请求的 servlet 路径。此属性仅在request-matcher 为 'mvc' 时适用。此外,仅在以下两种情况下需要该值:1) 在ServletContext中注册了两个或多个HttpServlet,它们的映射都以'/'开头且不同;2) 模式以已注册的HttpServlet路径的相同值开头,不包括默认的 (根) HttpServlet '/'

此属性对于filter-security-metadata-source无效。

<jee>

将 J2eePreAuthenticatedProcessingFilter 添加到过滤器链中,以提供与容器身份验证的集成。

<jee> 的父元素

<jee> 属性

  • mappable-roles 一个逗号分隔的角色列表,用于在传入的 HttpServletRequest 中查找。

  • user-service-ref 对用户服务 (或 UserDetailsService bean) ID 的引用。

<logout>

LogoutFilter添加到过滤器堆栈。它配置了SecurityContextLogoutHandler

<logout> 的父元素

<logout> 属性

  • delete-cookies 一个逗号分隔的 cookie 名称列表,这些 cookie 应在用户注销时删除。

  • invalidate-session 映射到SecurityContextLogoutHandlerinvalidateHttpSession。默认为 "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> 的父元素

<saml2-login> 属性

  • relying-party-registration-repository-refRelyingPartyRegistrationRepository的引用。

  • authentication-request-repository-refSaml2AuthenticationRequestRepository的引用。

  • authentication-request-context-resolver-refSaml2AuthenticationRequestResolver的引用。

  • authentication-converter-refAuthenticationConverter的引用。

  • login-processing-url 过滤器处理身份验证请求的 URI。

  • login-page 发送用户登录的 URI。

  • authentication-success-handler-refAuthenticationSuccessHandler的引用。

  • authentication-failure-handler-refAuthenticationFailureHandler的引用。

  • authentication-manager-refAuthenticationManager的引用。

<saml2-logout>

SAML 2.0 单点注销 功能配置对 RP 和 AP 发起的 SAML 2.0 单点注销的支持。

<saml2-logout> 的父元素

<saml2-logout> 属性

  • logout-url 依赖方或断言方可以触发注销的 URL。

  • logout-request-url 断言方可以发送 SAML 2.0 注销请求的 URL。

  • logout-response-url 断言方可以发送 SAML 2.0 注销响应的 URL。

  • relying-party-registration-repository-refRelyingPartyRegistrationRepository的引用。

  • logout-request-validator-refSaml2LogoutRequestValidator的引用。

  • logout-request-resolver-refSaml2LogoutRequestResolver的引用。

  • logout-request-repository-refSaml2LogoutRequestRepository的引用。

  • logout-response-validator-refSaml2LogoutResponseValidator的引用。

  • logout-response-resolver-refSaml2LogoutResponseResolver的引用。

<password-management>

此元素配置密码管理。

<password-management> 的父元素

<password-management> 属性

  • change-password-page 更改密码页面。默认为 "/change-password"。

<port-mappings>

默认情况下,将向配置中添加一个PortMapperImpl实例,用于重定向到安全和非安全 URL。此元素可选择用于覆盖该类定义的默认映射。每个子<port-mapping>元素定义一对 HTTP:HTTPS 端口。默认映射为 80:443 和 8080:8443。在重定向到 HTTPS中可以找到覆盖这些映射的示例。

<port-mappings> 的父元素

<port-mappings> 的子元素

<port-mapping>

提供了一种在强制重定向时将 http 端口映射到 https 端口的方法。

<port-mapping> 的父元素

<port-mapping> 属性

  • http 要使用的 http 端口。

  • https 要使用的 https 端口。

<remember-me>

RememberMeAuthenticationFilter添加到堆栈。这反过来将配置为TokenBasedRememberMeServicesPersistentTokenBasedRememberMeServices或用户指定的实现RememberMeServices的 bean,具体取决于属性设置。

<remember-me> 的父元素

<remember-me> 属性

  • authentication-success-handler-ref 如果需要自定义导航,则设置RememberMeAuthenticationFilter上的authenticationSuccessHandler属性。该值应为应用程序上下文中的AuthenticationSuccessHandler bean 的名称。

  • data-source-refDataSource 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,该 bean 实现此接口。如果使用注销过滤器,则还应实现LogoutHandler

  • token-repository-ref 配置PersistentTokenBasedRememberMeServices,但允许使用自定义的PersistentTokenRepository bean。

  • token-validity-seconds 映射到AbstractRememberMeServicestokenValiditySeconds属性。指定记住我 cookie 有效的秒数。默认情况下,它将有效期为 14 天。

  • user-service-ref 记住我服务实现需要访问UserDetailsService,因此必须在应用程序上下文中定义一个。如果只有一个,则命名空间配置将自动选择并使用它。如果有多个实例,则可以使用此属性显式指定 bean id

<request-cache> 元素

设置RequestCache实例,ExceptionTranslationFilter将使用该实例在调用AuthenticationEntryPoint之前存储请求信息。

<request-cache> 的父元素

<request-cache> 属性

  • ref 定义对作为RequestCache的 Spring bean 的引用。

<session-management>

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

<session-management> 的父元素

<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。

<session-management>的子元素

<concurrency-control>

添加对并发会话控制的支持,允许限制用户的活动会话数。将创建一个ConcurrentSessionFilter,并使用ConcurrentSessionControlAuthenticationStrategySessionManagementFilter一起使用。如果已声明form-login元素,则策略对象也将注入到创建的身份验证过滤器中。将创建一个SessionRegistry实例(除非用户希望使用自定义bean,否则为SessionRegistryImpl实例)供策略使用。

<concurrency-control>的父元素

<concurrency-control> 属性

  • error-if-maximum-exceeded 如果设置为“true”,当用户尝试超过允许的最大会话数时,将引发SessionAuthenticationException。默认行为是使原始会话过期。

  • expired-url 如果用户尝试使用已被并发会话控制器“过期”的会话(因为用户已超过允许的会话数并在其他地方再次登录),则用户将被重定向到的URL。除非设置了exception-if-maximum-exceeded,否则应设置此项。如果没有提供值,则只会将过期消息直接写回响应。

  • expired-url 允许注入ConcurrentSessionFilter使用的ExpiredSessionStrategy实例

  • max-sessions 映射到ConcurrentSessionControlAuthenticationStrategymaximumSessions属性。指定-1作为值以支持无限会话。

  • 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>的父元素

<x509> 属性

  • authentication-details-source-refAuthenticationDetailsSource的引用

  • subject-principal-regex 定义一个正则表达式,该表达式将用于从证书中提取用户名(用于UserDetailsService)。

  • user-service-ref 允许在配置多个实例的情况下,将特定的UserDetailsService与X.509一起使用。如果未设置,则将尝试自动找到合适的实例并使用它。

<filter-chain-map>

用于使用FilterChainMap显式配置FilterChainProxy实例

<filter-chain-map> 属性

  • request-matcher 定义用于匹配传入请求的策略。目前选项包括“ant”(用于ant路径模式)、“regex”(用于正则表达式)和“ciRegex”(用于不区分大小写的正则表达式)。

<filter-chain-map>的子元素

<filter-chain>

在内部使用,以定义特定的URL模式和应用于与该模式匹配的URL的过滤器列表。当多个filter-chain元素按顺序组合以配置FilterChainProxy时,最具体的模式必须放在列表的顶部,最通用的模式放在底部。

<filter-chain>的父元素

<filter-chain> 属性

  • filters 实现Filter的Spring bean的逗号分隔列表。值“none”表示此FilterChain不应使用任何Filter

  • request-matcher-refRequestMatcher的引用,它将用于确定是否应调用filters属性中的任何Filter

<filter-security-metadata-source>

用于为与FilterSecurityInterceptor一起使用显式配置FilterSecurityMetadataSource bean。通常只有在显式配置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”,则将授予访问权限。

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


1. 请参阅xref:servlet/configuration/xml-namespace.adoc#ns-web-xml[介绍章节]
2. 此功能实际上只是为了方便提供,并非旨在用于生产环境(在生产环境中,将选择一种视图技术并可用于呈现自定义登录页面)。DefaultLoginPageGeneratingFilter类负责呈现登录页面,并将根据需要为普通表单登录和/或OIDC提供登录表单。
3. 这不会影响PersistentTokenBasedRememberMeServices的使用,因为令牌存储在服务器端。