session管理

Spring Security可以与Spring Session库配合使用,只需要做一些简单的配置就可以实现一些功能,如(会话过期、一个账号只能同时在线一个、集群session等)

1、 会话超时

配置session会话超时时间,默认为30分钟,但是Spring Boot中的会话超时时间至少为60秒

#session设置
#配置session超时时间
server.servlet.session.timeout=60 

当session超时后, 默认跳转到登录页面(默认方式) 

自定义设置session超时后地址 

设置session管理和失效后跳转地址 

http.sessionManagement()        //设置session管理
        .invalidSessionUrl("/toLoginPage")        // session无效后跳转的路径,默认是登录页面 

 

2、并发控制 

并发控制即同一个账号同时在线个数,同一个账号同时在线个数如果设置为1表示,该账号在同一时间内只能有一个有效的登录,如果同一个账号又在其它地方登录,那么就将上次登录的会话过期,即后面的登录会踢掉前面的登录

2.1、修改超时时间

#session设置
#配置session超时时间
server.servlet.session.timeout=600 

2.2、设置最大会话数量 

http.sessionManagement() // 设置session管理
                .invalidSessionUrl("/toLoginPage") // session失效之后跳转的路径
                .maximumSessions(1)// session最大会话数量 1代表同一时间只能有一个用户登录
                .maxSessionsPreventsLogin(true) // 达到最大会话数量,就停止登录
                .expiredUrl("/toLoginPage"); // session过期之后跳转的路径

2.3、阻止用户第二次登录

sessionManagement也可以配置 maxSessionsPreventsLogin:boolean值,当达到maximumSessions设置的最大会话个数时阻止登录。 

 

3、集群session

实际场景中一个服务会至少有两台服务器在提供服务,在服务器前面会有一个nginx做负载均衡,用户访问nginx,nginx再决定去访问哪一台服务器。当一台服务宕机了之后,另一台服务器也可以继续提供服务,保证服务不中断。如果我们将session保存在Web容器(比如tomcat)中,如果一个用户第一次访问被分配到服务器1上面需要登录,当某些访问突然被分配到服务器二上,因为服务器二上没有用户在服务器一上登录的会话session信息,服务器二还会再次让用户登录,用户已经登录了还让登录就感觉不正常了。 

解决这个问题的思路是用户登录的会话信息不能再保存到Web服务器中,而是保存到一个单独的库(redis、mongodb、jdbc等)中,所有服务器都访问同一个库,都从同一个库来获取用户的session信息,如用户在服务器一上登录,将会话信息保存到库中,用户的下次请求被分配到服务器二,服务器二从库中检查session是否已经存在,如果存在就不用再登录了,可以直接访问服务了。 

3.1、引用依赖

<!-- 基于redis实现session共享 -->
<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-data-redis</artifactId>
</dependency>

3.2、设置session存储类型 

#使用redis共享session
spring.session.store-type=redis

3.3、测试

  • 使用其中一个服务去登录 http://localhost:8080/login
  • 使用另一个服务访问任意接口 ,则不需要再重新登录就可以直接访问 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悠然予夏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值