Spring Security Config : HttpSecurity安全配置器 SessionManagementConfigurer
-
urity
内置地对该接口仅提供了一个实现就是SimpleRedirectInvalidSessionStrategy
。
#invalidSessionStrategy和
#invalidSessionUrl都被调用时,#invalidSessionStrategy
会生效; -
#sessionAuthenticationErrorUrl
定义
SessionAuthenticationStrategy
抛出异常时要跳转的URL
。如果未设置该属性,SessionAuthenticationStrategy
抛出异常时,会返回402给客户端。注意在基于表单的登录失败时,该属性并不应用。因为此时表单认证失败
URL
会先被跳转。 -
#sessionAuthenticationFailureHandler
定义
SessionAuthenticationStrategy
抛出异常时要应用的认证失败处理器AuthenticationFailureHandler
。如果未设置该属性,SessionAuthenticationStrategy
抛出异常时,会返回402给客户端。注意在基于表单的登录失败时,该属性并不应用。因为此时表单认证失败
URL
会先被跳转。如果
#sessionAuthenticationErrorUrl
和#sessionAuthenticationFailureHandler
都被调用,#sessionAuthenticationFailureHandler
会生效; -
#enableSessionUrlRewriting
调用该方法设置属性
enableSessionUrlRewriting
.如果enableSessionUrlRewriting
属性被设置为true
,使用HttpServletResponse#encodeRedirectURL(String)
/HttpServletResponse#encodeURL(String)
时,允许将HTTP session
信息重写到URL
中。该方法对应的属性enableSessionUrlRewriting
缺省为false
,不允许Http session
重写到URL
。 -
#sessionCreationPolicy
设置会话创建策略
SessionCreationPolicy
。如果不设置,则会尝试使用公共对象中设置的SessionCreationPolicy
。如果公共对象中也没有设置会话创建策略,则使用缺省的会话创建策略SessionCreationPolicy.IF_REQUIRED
。 -
#sessionAuthenticationStrategy
允许设置一个会话认证策略。如果不设置,会使用缺省值。缺省值是
SessionFixationProtectionStrategy(针对Servlet 3.1)
/ChangeSessionIdAuthenticationStrategy(针对Servlet 3.1+)
。 -
#maximumSessions
设置每个用户的最大并发会话数量。此方法返回一个
ConcurrencyControlConfigurer
,这也是一个安全配置器,设置每个用户会话数量超出单用户最大会话并发数时如何处理。ConcurrencyControlConfigurer
的配置能力如下#expiredUrl
设置一个
URL
。如果某用户达到单用户最大会话并发数后再次请求新会话,则将最老的会话超时并将其跳转到该URL
。#expiredSessionStrategy
设置一个会话信息超时策略对象
SessionInformationExpiredStrategy
。如果某用户达到单用户最大会话并发数后再次请求新会话,则调用该策略超时哪个会话以及进行什么样的超时处理。
如果#expiredUrl
和#expiredSessionStrategy
都被调用,#expiredSessionStrategy
生效。#maxSessionsPreventsLogin
设置属性
maxSessionsPreventsLogin
.如果设置为true
,则某用户达到单用户最大会话并发数后再次请求登录时会被拒绝登录。
缺省情况下maxSessionsPreventsLogin
为false
。则某用户达到单用户最大会话并发数后再次请求登录时,其最老会话会被超时并被重定向到#expiredUrl
所设置的URL
(或者被#expiredSessionStrategy
所设置策略处理)。#sessionRegistry
设置所要使用的
SessionRegistry
,不设置时的缺省值为一个SessionRegistryImpl
。
-
#sessionFixation
此方法返回一个
SessionFixationConfigurer
,这也是一个安全配置器,专门对Session Fixcation
保护机制做出设置。SessionFixationConfigurer
的配置能力如下#newSession
设置固定会话攻击保护策略为
SessionFixationProtectionStrategy
,该策略会在用户会话认证成功时创建新的会话,但不会复制旧会话的属性。#migrateSession
设置固定会话攻击保护策略为
SessionFixationProtectionStrategy
,该策略会在用户会话认证成功时创建新的会话,并且复制旧会话的属性。#changeSessionId
设置固定会话攻击保护策略为
ChangeSessionIdAuthenticationStrategy
,仅针对Servlet 3.1+
,在用户会话认证成功时调用Servlet 3.1
方法HttpServletRequest#changeSessionId()
变更会话ID
并保留所有会话属性。在Servlet 3.0
或者更早版本中使用该策略会触发异常IllegalStateException
。#none
设置固定会话攻击保护策略为
NullAuthenticatedSessionStrategy
。这种策略其实是关闭Spring Security
的固定会话攻击保护策略。该方案多用在应用已经启用了其他的固定会话攻击保护策略的情况下,比如使用了应用服务器端固定会话攻击保护策略。如果没有采用其他固定会话攻击保护策略,建议不要使用此选项。
继承关系
使用
// HttpSecurity 类代码片段
public SessionManagementConfigurer<HttpSecurity> sessionManagement() throws Exception {
return getOrApply(new SessionManagementConfigurer<>());
}