SpringSecurity(05)——会话管理

会话管理

http.sessionManagement()

  1. invalidSessionUrl(String invalidSessionUrl):指定会话失效时(请求携带无效的 JSESSIONID 访问系统)重定向的 URL,默认重定向到登录页面。
  2. invalidSessionStrategy(InvalidSessionStrategy invalidSessionStrategy):指定会话失效时(请求携带无效的 JSESSIONID 访问系统)的处理策略。
  3. maximumSessions(int maximumSessions):指定每个用户的最大并发会话数量,-1 表示不限数量。
  4. maxSessionsPreventsLogin(boolean maxSessionsPreventsLogin):如果设置为 true,表示某用户达到最大会话并发数后,新会话请求会被拒绝登录;如果设置为 false,表示某用户达到最大会话并发数后,新会话请求访问时,其最老会话会在下一次请求时失效并根据 expiredUrl() 或者 expiredSessionStrategy() 方法配置的会话失效策略进行处理,默认值为 false。
  5. expiredUrl(String expiredUrl):如果某用户达到最大会话并发数后,新会话请求访问时,其最老会话会在下一次请求时失效并重定向到 expiredUrl。
  6. expiredSessionStrategy(SessionInformationExpiredStrategy expiredSessionStrategy):如果某用户达到最大会话并发数后,新会话请求访问时,其最老会话会在下一次请求中失效并按照该策略处理请求。注意如果本方法与 expiredUrl() 同时使用,优先使用 expiredUrl() 的配置。
  7. sessionRegistry(SessionRegistry sessionRegistry):设置所要使用的 sessionRegistry,默认配置的是 SessionRegistryImpl 实现类
  8. sessionCreationPolicy
  • SessionCreationPolicy.ALWAYS:总是创建HttpSession
  • SessionCreationPolicy.IF_REQUIRED:SpringSecurity只会在需要时创建一个HttpSession
  • SessionCreationPolicy.NEVER:SpringSecurity不会创建HttpSession,但如果他已经存在,将可以使用HttpSession
  • SessionCreationPolicy.STATELESS:SpringSecurity永远不会创建HttpSession,他不会使用HttpSession来获取SecurityContext

会话失效处理

当用户的session会话失败(请求携带着无效的JSESSIONID访问系统)时,可以制定相关策略对会话失效的请求进行处理

invalidSessionUrl

@EnableWebSecurity
public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
   
   

    /**
     * 定制基于 HTTP 请求的用户访问控制
     */
    @Override
    protected void configure(HttpSecurity http) throws Exception {
   
   
        http.formLogin()
            .and()
            .authorizeRequests()
            .anyRequest()
            .authenticated();
        
        // 开启 Session 会话管理配置
        http.sessionManagement()
                // 设置 Session 会话失效时重定向路径,默认为 loginPage()
                .invalidSessionUrl("/login/page");        
    }
}
# session 失效时间,单位是秒,默认为 30min
server.servlet.session.timeout=30m

# JSESSIONID (Cookie)的生命周期,单位是秒,默认为 -1
server.servlet.session.cookie.max-age=-1

注意:Session 的失效时间至少要 1 分钟,少于 1 分钟按照 1 分钟配置

invalidSessionStrategy

/**
 * 用户请求携带无效的 JSESSIONID 访问时的处理策略,即对应的 Session 会话失效
 */
@Component
public class CustomInvalidSessionStrategy implements InvalidSessionStrategy {
   
   

    private final RedirectStrategy redirectStrategy = new DefaultRedirectStrategy();

    @Override
    public void onInvalidSessionDetected(HttpServletRequest request, HttpServletResponse response) throws IOException {
   
   
        // 清除浏览器中的无效的 JSESSIONID
        Cookie cookie = new Cookie("JSESSIONID", null);
        cookie.setPath(getCookiePath(request));
        cookie.setMaxAge(0);
        re
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值