41.1 Web Application Security网络应用安全
41.1.1 <debug>
启用spring安全调试基础架构。这将提供人类可读的(多行)调试信息来监控进入安全过滤器的请求。这可能包括敏感信息,例如请求参数或头,并且应该只在开发环境中使用。
41.1.2 <http>
如果在应用程序中使用< http >元素,将创建一个名为“springSecurityFilterChain”的过滤器链代理FilterChainProxy
bean,并且使用元素中的配置在过滤器链代理FilterChainProxy中构建过滤器链。从Spring Security 3.1开始,可以使用额外的http元素来添加额外的过滤器链[22]。一些核心过滤器总是在过滤器链中创建,其他的将根据属性和存在的子元素添加到堆栈中。标准过滤器的位置是固定的(参见命名空间介绍中的过滤器顺序表),当用户必须在FilterChainProxy bean中显式配置过滤器链时,消除了以前版本框架的常见错误源。当然,如果您需要完全控制配置,您仍然可以这样做。
所有需要引用身份验证管理器的筛选器AuthenticationManager 都将自动注入由命名空间配置创建的内部实例(有关身份验证管理器AuthenticationManager 的更多信息,请参见介绍章节)。
每个< http >命名空间块总是创建一个SecurityContextPersistenceFilter、一个ExceptionTranslationFilter和一个FilterSecurityInterceptor。这些都是固定的,不能用替代品代替。
<http> Attributes
< http >元素上的属性控制着核心过滤器的一些属性。
access-decision-manager-ref:可选属性,指定应用于授权超文本传输协议请求的访问决策管理器AccessDecisionManager实现的标识。默认情况下,基于确认AffirmativeBased的实现用于角色投票者RoleVoter
和授权投票者AuthenticatedVoter。
authentication-manager-ref :对此http元素创建的筛选器链FilterChain使用的身份验证管理器AuthenticationManager
的引用。
auto-config:自动注册登录表单、BASIC身份验证、注销服务。如果设置为“真”,将添加所有这些功能(尽管您仍然可以通过提供相应的元素来自定义每个功能的配置)。如果未指定,默认为“假”。不建议使用此属性。请改用显式配置元素,以避免混淆。
create-session:控制spring安全类创建一个超文本传输协议会话。选项包括:
always
如果不存在会话,Spring Security将主动创建会话。ifRequired
仅当需要会话时,Spring Security才会创建一个会话(默认值)。never
Spring Security永远不会创建会话,但是如果应用程序创建了会话,它会使用会话。stateless
Spring Security不会创建会话并忽略获取Spring身份验证的会话。
disable-url-rewriting:防止会话标识被附加到应用程序中的网址。如果此属性设置为true,客户端必须使用cookies。默认值为真。
entry-point-ref :通常使用的身份验证输入点AuthenticationEntryPoint
将根据已配置的身份验证机制进行设置。此属性允许通过定义将启动身份验证过程的自定义身份验证入口点AuthenticationEntryPoint
bean来覆盖此行为。
jaas-api-provision:如果可用,将请求作为从JaasAuthenticationToken获取的主题运行,这是通过向堆栈中添加JaasApiIntegrationFilter bean来实现的。默认为false。
name :一个bean标识符,用于引用上下文中其他地方的bean。
once-per-request:对应于筛选器安全性FilterSecurityInterceptor接口的observeOncePerRequest属性。默认为真。
pattern :为http元素定义一个模式控制着将通过它定义的过滤器列表过滤的请求。解释取决于配置的请求匹配器。如果没有定义模式,所有的请求都将被匹配,所以最具体的模式应该首先声明。
realm :设置用于基本身份验证的领域名称(如果启用)。对应于基本身份验证输入点BasicAuthenticationEntryPoint上的realmName属性。
request-matcher :定义在FilterChainProxy中使用的RequestMatcher策略和由拦截url创建的beans,以匹配传入的请求。目前的选项有mvc、ant、regex和ciRegex,分别针对Spring MVC、ant、正则表达式和不区分大小写的正则表达式。使用模式、方法和servlet路径属性为每个拦截url元素创建一个单独的实例。蚂蚁路径使用蚂蚁路径请求匹配器进行匹配,正则表达式使用正则表达式请求匹配器进行匹配,而对于Spring MVC路径匹配,则使用MvcRequestMatcher。请参见这些类的Javadoc,了解关于匹配是如何执行的更多细节。蚂蚁路径是默认策略。
request-matcher-ref :对实现请求匹配器RequestMatcher
的bean的引用,该请求匹配器将确定是否应该使用该筛选器链FilterChain
。这是模式的更强有力的替代。
security :通过将此属性设置为none,请求模式可以映射到空的筛选器链。将不会应用任何安全性,也不会提供任何Spring Security的功能。
security-context-repository-ref:允许将自定义的SecurityContextRepository注入到SecurityContextPersistenceFilter中。
servlet-api-provision:提供不同版本的HttpServletRequest安全方法,如isUserInRole()和getPrincipal(),这些方法是通过向堆栈中添加一个SecurityContextHolderAreRequestFilter bean来实现的。默认为真。
use-expressions:在访问属性中启用EL表达式,如基于表达式的访问控制一章所述。默认值为真。
Child Elements of <http>
- access-denied-handler
- anonymous
- cors
- csrf
- custom-filter
- expression-handler
- form-login
- headers
- http-basic
- intercept-url
- jee
- logout
- openid-login
- port-mappings
- remember-me
- request-cache
- session-management
- x509
41.1.3 <access-denied-handler>
此元素允许您使用错误页errorPage
属性为ExceptionTranslationFilter使用的默认访问拒绝处理程序AccessDeniedHandler
设置错误页属性,或者使用该属性提供您自己的实现。这将在异常转换过滤器一节中详细讨论。
<access-denied-handler> Attributes
error-page :如果经过身份验证的用户请求一个他们无权访问的页面,则该用户将被重定向到的拒绝访问页面。
ref:定义对AccessDeniedHandler类型的Spring bean的引用。
41.1.4 <cors>
这个元素允许配置一个CorsFilter。如果没有指定CorsFilter或CorsConfigurationSource,并且Spring MVC在类路径中,那么将使用一个HandlerMappingIntrospector胸针作为CorsConfigurationSource。
<cors> Attributes
< cors >元素上的属性控制headers元素。
ref:指定CorsFilter的bean名称的可选属性。
cors-configuration-source-ref :可选属性,指定要注入到由XML命名空间创建的CorsFilter中的CorsConfigurationSource的bean名称。
41.1.5 <headers>
这个元素允许配置附加的(安全的)头和响应一起发送。它使几个标题的配置变得容易,并且允许通过标题元素设置自定义标题。其他信息,请参见参考资料的安全标题部分。
Cache-Control
, Pragma
, and Expires:
可以使用cache-control 元素进行设置。这可以确保浏览器不会缓存您的安全页面。
Strict-Transport-Security:可以使用hsts元素设置严格-传输-安全性。这确保了浏览器自动请求HTTPS用于将来的请求。
X-Frame-Options:可以使用 frame-options元素进行设置。框架选项标题X-Frame-Options header可用于防止点击劫持攻击。
X-XSS-Protection:可以使用xss-protection元素进行设置。浏览器可以使用X-XSS保护头进行基本控制。
X-Content-Type-Options:可以使用内容类型选项content-type-options元素进行设置。“内容类型选项”标题X-Content-Type-Options header阻止了互联网资源管理器从声明的内容类型中嗅探响应。这也适用于谷歌浏览器,当下载扩展时。
Public-Key-Pinning or Public-Key-Pinning-Report-Only:可以使用hpkp元素进行设置。这使得HTTPS网站能够抵制攻击者使用错误颁发的或其他欺诈性的证书进行假冒。
Content-Security-Policy or Content-Security-Policy-Report-Only:可以使用内容安全策略 content-security-policy 元素进行设置。内容安全策略(CSP)是一种机制,网络应用程序可以利用它来减轻内容注入漏洞,如跨站点脚本(XSS)。
Referrer-Policy:可以使用referrer-policy元素进行设置,referrer-Policy是一种web应用程序可以用来管理Referrer字段的机制,该字段包含用户所在的最后一页。
<headers> Attributes
<headers>元素上的属性控制标题元素。
defaults-disabled:可选属性,指定禁用默认的Spring Security的HTTP响应头。默认值为false(包含默认标题)。
disabled :可选属性,指定禁用spring安全的超文本传输协议响应头。默认值为false(启用标题)。
Child Elements of <headers>
- cache-control
- content-security-policy
- content-type-options
- frame-options
- header
- hpkp
- hsts
- referrer-policy
- xss-protection
41.1.6 <cache-control>
添加Cache-Control
, Pragma
, and Expires
,以确保浏览器不会缓存您的安全页面。
<cache-control> Attributes
disabled :指定是否应禁用缓存控制。默认值为false。
41.1.7 <hsts>
启用后,会将严格传输安全标头 Strict-Transport-Security 添加到任何安全请求的响应中。这允许服务器指示浏览器在将来的请求中自动使用HTTPS。
<hsts> Attributes
disabled :指定是否应禁用严格传输安全性 Strict-Transport-Security。默认值为false。
include-sub-domains:指定是否应包含子域。默认为真。
max-age-seconds:指定主机被视为已知HSTS主机的最长时间。默认一年。
request-matcher-ref :用于确定是否应该设置标头的请求匹配器实例。如果HttpServletRequest.isSecure()为真,则为默认值。
41.1.8 <hpkp>
启用后,会将用于HTTP头的公钥锁定扩展添加到任何安全请求的响应中。这使得HTTPS网站能够抵制攻击者使用错误颁发的或其他欺诈性的证书进行假冒。
<hpkp> Attributes
- report-uri 指定浏览器应该向其报告pin验证失败的URI。
41.1.9 <pins>
引脚列表
Child Elements of <pins>
41.1.10 <pin>
使用base64编码的SPKI指纹作为值,使用加密哈希算法作为属性来指定pin
<pin> Attributes
- algorithm 加密哈希算法。默认值为SHA256。
41.1.11 <content-security-policy>
启用时,将内容安全策略(CSP)头添加到响应中。CSP是一种机制,网络应用程序可以利用它来减轻内容注入漏洞,如跨站点脚本(XSS)。
<content-security-policy> Attributes
- policy-directives 内容安全策略Content-Security-Policy标题的安全策略指令,或者如果仅报告report-only设置为真,则使用内容安全策略仅报告Content-Security-Policy-Report-Only标题。
- report-only 设置为true,启用内容安全策略仅报告Content-Security-Policy-Report-Only标题,仅报告策略违规。默认为false。
41.1.12 <referrer-policy>
启用时,将引用者策略 Referrer Policy 标头添加到响应中。
<referrer-policy> Attributes
- policy 推荐人的策略-策略Referrer-Policy标题。默认为“no-referrer”。
41.1.13 <frame-options>
启用时,会在响应中添加X-Frame-Options标头,这允许较新的浏览器进行一些安全检查,并防止点击劫持攻击。
<frame-options> Attributes
-
policy
DENY
页面不能显示在框架中,无论站点是否尝试这样做。当指定框架选项策略时,这是默认设置。SAMEORIGIN
页面只能显示在与页面本身原点相同的框架中。ALLOW-FROM 原点页面只能显示在指定原点的框架中。
换句话说,如果您指定DENY,从其他站点加载时,不仅在框架中加载页面的尝试会失败,从同一站点加载时,这样做的尝试也会失败。另一方面,如果您指定SAMEORIGIN,您仍然可以在框架中使用该页面,只要包含它的站点与提供该页面的站点相同。
-
strategy 选择使用“AllowFromStrategy ”策略时要使用的ALLOW-FROM 策略。
static
使用一个静态的ALLOW-FROM值。该值可以通过 value 属性来设置。regexp
使用正则表达式来验证传入的请求以及它们是否被允许。正则表达式可以通过 value 属性来设置。可以使用 from-parameter指定用于检索要验证的值的请求参数。whitelist包含允许的域的逗号分隔列表。逗号分隔列表可以通过 value属性来设置。可以使用 from-parameter数指定用于检索要验证的值的请求参数。
- from-parameter 为ALLOW-FROM策略使用正则表达式或白名单时,指定要使用的请求参数的名称。
41.1.14 <xss-protection>
将X-XSS-Protection标头添加到响应中,以帮助防止 reflected / Type-1 Cross-Site Scripting (XSS)攻击。这绝不是对XSS袭击的全面保护!
<xss-protection> Attributes
xss-protection-disabled 不要包括反射/类型1跨站点脚本(XSS)保护的标题。
xss-protection-enabled 明确启用或禁用反射/类型1跨站点脚本(XSS)保护。
xss-protection-block 当为真且xss-protection-enabled为真时,将mode=block添加到标头。这向浏览器指示根本不应该加载页面。当false且xss-protection-enabled为true时,当检测到反射攻击时,页面仍将呈现,但响应将被修改以防止攻击。请注意,有时有办法绕过这种模式,这往往会使阻止页面更可取。
41.1.15 <content-type-options>
向响应中添加值为nosniff的“X-Content-Type-Options”标题。这将禁用IE8+和Chrome扩展的MIME嗅探。
<content-type-options> Attributes
- disabled 指定是否应禁用内容类型选项Content Type Options。默认值为false。
41.1.16 <header>
向响应中添加额外的标头,名称和值都需要指定。
<header-attributes> Attributes
- ref .对
HeaderWriter
接口的自定义实现的引用。
41.1.17 <anonymous>
向堆栈中添加匿名用户身份验证过滤器AnonymousAuthenticationFilter 和匿名用户身份验证提供程序AnonymousAuthenticationProvider。如果您使用的是“身份验证匿名IS_AUTHENTICATED_ANONYMOUSLY ”属性,则需要此项。
anonymous> Attributes
- username 应该分配给匿名请求的用户名。这允许识别主体,这对于日志记录和审计可能是重要的。如果未设置,默认为匿名用户。
41.1.18 <csrf>
该元素将为应用程序添加跨站点请求伪造(CSRF)保护。它还更新了默认的请求缓存,以便在身份验证成功后仅重放“获取”请求。更多信息可在参考资料的“跨站点伪造请求(CSRF)”部分找到。
<csrf> Attributes
disabled 可选属性,指定禁用春季安全的CSRF保护。默认值为假(启用CSRF保护)。强烈建议启用CSRF保护。
token-repository-ref 要使用的CsrfTokenRepository。默认为HttpSessionCsrfTokenRepository。
request-matcher-ref 用于确定是否应该应用CSRF的请求匹配器实例。默认为除 "GET", "TRACE", "HEAD", "OPTIONS"之外的任何超文本传输协议方法。
41.1.19 <custom-filter>
此元素用于向过滤器链添加过滤器。它不创建任何额外的bean,而是用于选择已经在应用程序上下文中定义的javax.servlet.Filter类型的bean,并将其添加到Spring Security维护的筛选器链中的特定位置。完整的细节可以在命名空间章节中找到。
<custom-filter> Attributes
- after 紧接其后的过滤器,自定义过滤器应放置在链中。只有希望将自己的过滤器混合到安全过滤器链中并且对标准的Spring安全过滤器有一定了解的高级用户才需要该功能。过滤器名称映射到特定的Spring安全性实现过滤器。
41.1.20 <expression-handler>
定义在启用基于表达式的访问控制时将使用的安全表达式处理程序实例。如果不提供,将使用默认实现(不支持ACL)。
41.1.21 <form-login>
用于将用户名密码身份验证过滤器UsernamePasswordAuthenticationFilter
添加到过滤器堆栈,并将登录身份验证入口点LoginUrlAuthenticationEntryPoint添加到应用程序上下文,以按需提供身份验证。这将始终优先于其他命名空间创建的入口点。如果未提供属性,将在网址“//login”处自动生成登录页面。可以使用<form-login>
属性自定义行为。
- always-use-default-target 如果设置为true,用户将总是从默认的目标url default-target-url给定的值开始,不管他们是如何到达登录页面的。映射到usernamepassworauthenticationfilter的alwaysUseDefaultTargetUrl属性。默认值为false。
- authentication-failure-handler-ref 可以作为身份验证失败url authentication-failure-url的替代,让您在身份验证失败后完全控制导航流。该值应该是应用程序上下文中的身份验证失败处理程序
AuthenticationFailureHandler
bean的名称。
- authentication-failure-url 映射到用户名密码身份验证筛选器UsernamePasswordAuthenticationFilter的身份验证失败Url
authenticationFailureUrl
属性。定义登录失败时浏览器将被重定向到的网址。默认为/login?error,将由自动登录页面生成器自动处理,用错误消息重新呈现登录页面。
- authentication-success-handler-ref 这可以作为默认目标urldefault-target-url和始终使用默认目标 always-use-default-target的替代方案,让您在成功验证后完全控制导航流。该值应该是应用程序上下文中身份验证成功处理程序
AuthenticationSuccessHandler
bean的名称。默认情况下,会使用SaveDrequestAwarAuThEnticationSuccessHandler的实现,并注入默认的目标urldefault-target-url。
- default-target-url 映射到UserNamePassWordAuthenticationFilter的defaultTargetUrl属性。如果未设置,默认值为“/”(应用程序根目录)。如果用户在尝试访问受保护的资源时没有被要求登录,他们将在登录后被带到此网址,此时他们将被带到最初请求的网址。
- login-page 应该用来呈现登录页面的网址。映射到登录身份验证入口点LoginUrlAuthenticationEntryPoint的登录身份验证
loginFormUrl
属性。默认为“/login”。
- authentication-success-forward-url 将转发身份验证成功处理程序
ForwardAuthenticationSuccessHandler
映射到用户名密码身份验证筛选器UsernamePasswordAuthenticationFilter的身份验证成功处理程序authenticationSuccessHandler
属性。
- authentication-failure-forward-url 身份验证失败转发url将转发身份验证失败处理程序
ForwardAuthenticationFailureHandler
映射到用户名密码身份验证筛选器UsernamePasswordAuthenticationFilter的身份验证失败处理程序authenticationFailureHandler
属性。
41.1.22 <http-basic>
向配置中添加基本身份验证筛选器BasicAuthenticationFilter
和基本身份验证输入点BasicAuthenticationEntryPoint
。后者仅在未启用基于表单的登录时用作配置入口点。
<http-basic> Attributes
41.1.23 <http-firewall> Element
这是一个顶级元素,可用于将HttpFirewall的自定义实现注入到由命名空间创建的筛选器链代理FilterChainProxy
中。默认实现应该适用于大多数应用程序。
41.1.24 <intercept-url>
这个元素用于定义应用程序感兴趣的一组网址模式,并配置如何处理它们。它用于构造过滤器安全性接口FilterSecurityInterceptor使用的过滤器调用安全性数据源FilterInvocationSecurityMetadataSource
。例如,如果HTTPS需要访问特定的网址,它还负责配置一个通道处理过滤器ChannelProcessingFilter
。将指定的模式与传入的请求进行匹配时,匹配是按照元素声明的顺序进行的。因此,最具体的模式应该放在第一位,最一般的模式应该放在最后。
<intercept-url> Attributes
- access列出将存储在已定义的网址模式/方法组合URL pattern/method combination的筛选器调用安全性数据源
FilterInvocationSecurityMetadataSource
中的访问属性。这应该是安全配置属性(如角色名称)的逗号分隔列表。
- filters 只能取值“none”。这将导致任何匹配请求完全绕过Spring Security筛选器链。< http >配置的其余部分都不会对请求产生任何影响,并且在其持续时间内也没有可用的安全上下文。请求期间对安全方法的访问将会失败。
- requires-channel 可以是“http”或“https”,这取决于特定的URL模式应该分别通过HTTP还是HTTPS来访问。或者,当没有偏好时,可以使用值“any”。如果这个属性出现在任何< intercept-url >元素上,那么ChannelProcessingFilter将被添加到过滤器堆栈中,并且它的附加依赖项将被添加到应用程序上下文中。
如果添加了<port-mappings>配置,则安全通道处理器SecureChannelProcessor
和安全通道处理器InsecureChannelProcessor
beans将使用该配置来确定用于重定向到HTTP/HTTPS的端口。
此属性对于 filter-security-metadata-source无效 |
- servlet-path servlet路径,它将与模式和HTTP方法结合使用,以匹配传入的请求。此属性仅在请求匹配器为“mvc”时适用。此外,该值仅在以下两种使用情况下是必需的:1)在ServletContext中注册了两个或多个HttpServlet,它们具有以“/”开头的不同映射;2)该模式以注册的HttpServlet路径的相同值开始,不包括默认的(根)Httpservlet“/”。
此属性对于 filter-security-metadata-source无效 |
41.1.25 <jee>
将J2ee PreauthenticatedProcessingFilter添加到筛选器链,以提供与容器身份验证的集成。
<jee> Attributes
- user-service-ref 对用户服务user-service (或用户详细信息服务UserDetailsService bean)标识的引用
41.1.26 <logout>
将登录筛选器LogoutFilter
添加到筛选器堆栈。这是用SecurityContextLogoutHandler配置的。
<logout> Attributes
-
logout-success-url
用户注销后将被带到的目标网址。默认为 <form-login-login-page>/?logout (i.e. /login?logout)。设置此属性将使用配置了属性值的SimpleRedirectionValidSessionStrategy注入会话管理筛选器SessionManagementFilter
。当提交无效的会话标识时,将调用策略,重定向到配置的网址。
41.1.27 <openid-login>
类似于<form-login>,具有相同的属性。登录处理urllogin-processing-url的默认值是“/login/openid”。将注册一个开放身份验证过滤器OpenIDAuthenticationFilter
和开放身份验证提供程序OpenIDAuthenticationProvider
。后者需要对用户详细信息服务UserDetailsService的引用。同样,这可以使用user-service-ref属性由id指定,也可以在应用程序上下文中自动定位。
<openid-login> Attributes
- authentication-failure-handler-ref 对应用于处理失败的身份验证请求的身份验证失败处理程序AuthenticationFailureHandler bean的引用。不应与身份验证失败ur authentication-failure-url l结合使用,因为实现应该始终处理到后续目的地的导航
- authentication-failure-url 登录失败页面的网址。如果未指定登录失败网址,Spring Security将在/login自动创建一个失败登录网址/login?login_error和一个相应的过滤器,用于在请求时呈现登录失败的网址。
- authentication-success-forward-url 将转发身份验证成功处理程序
ForwardAuthenticationSuccessHandler
映射到用户名密码身份验证筛选器UsernamePasswordAuthenticationFilter的身份验证成功处理程序authenticationSuccessHandler
属性。
- authentication-failure-forward-url 将转发身份验证失败处理程序
ForwardAuthenticationFailureHandler
映射到用户名密码身份验证筛选器UsernamePasswordAuthenticationFilter的身份验证失败处理程序authenticationFailureHandler
属性。
- authentication-success-handler-ref 对身份验证成功处理程序bean的引用,该bean应用于处理成功的身份验证请求。不应与默认目标url(或始终使用默认目标)结合使用,因为实现应始终处理到后续目的地的导航。
- default-target-url 如果用户以前的操作无法恢复,则在成功身份验证后将重定向到的网址。如果用户访问登录页面时没有首先请求触发身份验证的安全操作,通常会发生这种情况。如果未指定,默认为应用程序的根目录。
Child Elements of <openid-login>
41.1.28 <attribute-exchange>
属性交换attribute-exchang元素定义了应该向身份提供者请求的属性列表。一个例子可以在命名空间配置一章的OpenID支持部分找到。可以使用多个,在这种情况下,每个都必须有一个标识符匹配 identifier-match
属性,包含一个正则表达式,该表达式与提供的OpenID标识符相匹配。这允许从不同的提供商(谷歌、雅虎等)获取不同的属性列表。
<attribute-exchange> Attributes
Child Elements of <attribute-exchange>
41.1.29 <openid-attribute>
发出开放获取请求(OpenID AX Fetch Request)时使用的属性
<openid-attribute> Attributes
41.1.30 <port-mappings>
默认情况下,PortMapperImpl的一个实例将被添加到配置中,用于重定向到安全和不安全的URL。这个元素可以选择性地用来覆盖该类定义的默认映射。每个子<port-mapping>元素定义了一对HTTP:HTTPS端口。默认映射是80:443和8080:8443。在命名空间介绍中可以找到一个覆盖这些的例子。
Child Elements of <port-mappings>
41.1.31 <port-mapping>
提供一种在强制重定向时将http端口映射到https端口的方法。
<port-mapping> Attributes
41.1.32 <remember-me>
将RememberMeAuthenticationFilter添加到堆栈中。这又将根据属性设置配置令牌基成员身份服务TokenBasedRememberMeServices、持久令牌基成员身份服务PersistentTokenBasedRememberMeServices
或实现成员身份服务RememberMeServices的用户指定user-specified 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”属性。
- remember-me-cookie 存储用于“记住我”身份验证的令牌的cookie的名称。默认为“remember-me”。映射到抽象成员服务AbstractRememberMeServices的“cookieName”属性。
- key 映射到抽象成员服务的“键”属性。应设置为唯一值,以确保“记住我”cookies仅在一个应用程序中有效[24]。如果没有设置,将生成一个安全的随机值。由于生成安全随机值可能需要一段时间,因此显式设置该值有助于在使用“记住我”功能时缩短启动时间。
- services-ref 允许完全控制将由过滤器使用的RememberMeServices实现。该值应该是实现该接口的应用程序上下文中bean的id。如果正在使用注销过滤器,还应该实现LogoutHandler。
- token-repository-ref 配置PersistentTokenBasedRememberMeServices,但允许使用自定义的PersistentTokenRepository bean。
- token-validity-seconds 映射到抽象成员服务AbstractRememberMeServices的令牌有效性秒tokenValiditySeconds 属性。指定“记住我”cookie的有效期(以秒为单位)。默认情况下,有效期为14天。
- use-secure-cookie 建议仅在HTTPS提交“记住我”cookies,因此应标记为“安全”。默认情况下,如果发出登录请求的连接是安全的(应该如此),将使用安全cookie。如果将此属性设置为false,将不会使用安全cookies。将其设置为true将始终在cookie上设置安全标志。此属性映射到抽象成员服务AbstractRememberMeServices的useSecureCookie属性。
- user-service-ref 记住我的服务实现需要访问用户详细信息服务UserDetailsService,所以必须在应用程序上下文中定义一个。如果只有一个,它将由命名空间配置自动选择和使用。如果有多个实例,可以使用该属性显式指定bean id。
41.1.33 <request-cache> Element
设置请求缓存RequestCache 实例,在调用身份验证输入点AuthenticationEntryPoint之前,该实例将被异常转换筛选器ExceptionTranslationFilter 用来存储请求信息。
<request-cache> Attributes
41.1.34 <session-management>
与会话管理相关的功能通过向过滤器堆栈添加会话管理过滤器SessionManagementFilter
来实现。
<session-management> Attributes
- invalid-session-url 设置此属性将使用用属性值配置的简单重定向无效会话策略SimpleRedirectInvalidSessionStrategy 来注入会话管理筛选器SessionManagementFilter。当提交无效的会话标识时,将调用策略,重定向到配置的网址。
- invalid-session-url 允许注入会话管理过滤器SessionManagementFilter使用的InvalidSessionStrategy实例。请使用此属性或无效会话url属性,但不能同时使用这两个属性。
- session-authentication-error-url 定义当会话身份验证策略SessionAuthenticationStrategy 引发异常时应显示的错误页面的网址。如果未设置,将向客户端返回未经授权的(401)错误代码。请注意,如果在基于表单的登录过程中出现错误,则此属性不适用,在这种情况下,身份验证失败的网址将优先。
-
session-fixation-protection 为“无”,将不会应用任何保护。“新会话”将创建一个新的空会话,只迁移与Spring Security相关的属性。“迁移会话”将创建一个新会话,并将所有会话属性复制到新会话。在Servlet 3.1 (Java EE 7)和更新的容器中,指定“changeSessionId”将保留现有会话,并使用容器提供的会话固定保护(HttpserVletrequest # ChangeSessionid())。在Servlet 3.1和更新的容器中默认为“changeSessionId”,在旧容器中默认为“migrateSession”。如果旧容器中使用了“changeSessionId”,将引发异常。 如果启用了会话固定保护,将向会话管理过滤器注入适当配置的默认会话身份验证策略。有关更多详细信息,请参见该类的Javadoc。
Child Elements of <session-management>
41.1.35 <concurrency-control>
增加对并发会话控制的支持,允许对用户可以拥有的活动会话数量进行限制。将创建一个并发会话过滤器ConcurrentSessionFilter ,并发会话控制身份验证策略ConcurrentSessionControlAuthenticationStrategy 将与会话管理过滤器SessionManagementFilter一起使用。如果已经声明了表单登录元素,那么策略对象也将被注入到创建的身份验证过滤器中。将创建一个会话注册SessionRegistry 实例(除非用户希望使用自定义bean,否则为会话注册实例),供策略使用。
<concurrency-control> Attributes
- error-if-maximum-exceeded 如果设置为“真”,当用户试图超过最大允许会话数时,将引发会话身份验证异常SessionAuthenticationException 。默认行为是终止原始会话。
- expired-url 如果用户试图使用已被并发会话控制器“过期”的会话,将被重定向到的网址,因为用户已超过允许的会话数,并已在其他地方再次登录。应该设置,除非设置了“如果超过最大值则异常”。如果没有提供值,一个到期消息将直接写回响应。
- session-registry-alias 在您自己的beans或管理界面中引用内部会话注册表也很有用。您可以使用session-registry-alias属性公开内部bean,给它一个可以在配置的其他地方使用的名称。
- session-registry-ref 用户可以使用session-registry-ref属性提供他们自己的会话注册表SessionRegistry 实现。其他并发会话控制beans将被连接起来使用它。
41.1.36 <x509>
增加了对X.509身份验证的支持。将向堆栈中添加一个X509身份验证过滤器X509AuthenticationFilter
,并创建一个Http403ForbiddenEntryPoint bean。后者仅在没有使用其他身份验证机制的情况下使用(它唯一的功能是返回一个HTTP 403错误代码)。还将创建一个预身份验证身份验证提供程序PreAuthenticatedAuthenticationProvider
,它将用户权限的加载委托给用户详细信息服务UserDetailsService设备。
<x509> Attributes
41.1.37 <filter-chain-map>
用于使用过滤器链映射显式配置过滤器链代理实例
Child Elements of <filter-chain-map>
41.1.38 <filter-chain>
用于定义特定的网址模式和适用于匹配该模式的网址的过滤器列表。当为了配置过滤器链代理而将多个过滤器链元素组合在一个列表中时,最具体的模式必须放在列表的顶部,最一般的模式放在底部。
<filter-chain> Attributes
41.1.39 <filter-security-metadata-source>
用于显式配置与筛选器安全性接口FilterSecurityInterceptor一起使用的筛选器安全性数据源FilterSecurityMetadataSource bean。通常只有在显式配置过滤器链代理FilterChainProxy 时才需要,而不是使用< http >元素。使用的拦截url元素应该只包含模式、方法和访问属性。任何其他操作都将导致配置错误。
<filter-security-metadata-source> Attributes
- use-expressions 允许在<intercept-url >元素的“access”属性中使用表达式,而不是传统的配置属性列表。默认为“true”。如果启用,每个属性应该包含一个布尔表达式。如果表达式计算结果为“true”,将授予访问权限。