一. session管理
1.1 session并发控制
session的失效时间默认为30min,可以通过 server.servlet.session.timeout类配置。在很多的业务场景下,我们只允许一台设备登录到服务端。
安全配置
.and() //表示进行其他的配置
.sessionManagement() // session的处理
.maximumSessions(1) // 表示一个用户只能有一个会话
.expiredSessionStrategy(mutipleSessionHandler) //表示如果有多个用户登录,就强制让其他的用户下线
.and()
session失效处理逻辑
/**
* 同时多设备登录处理
*/
public class MultipleSessionHandler implements SessionInformationExpiredStrategy {
@Override
public void onExpiredSessionDetected(SessionInformationExpiredEvent event)
throws IOException, ServletException {
HttpServletResponse response = event.getResponse();
response.setContentType("text/plain;charset=utf-8");
response.getWriter().write("其他设备登录");
}
}
1.2 session集群管理
当我们在集群环境下,用户每次的请求我们并不能保证每次都是到达同一台服务器,可能会导致session存在于不同的服务器上,而让用户重新进行登录,所以必须要采用一个中间件来存储用户的session信息,企业中使用最多的就是redis.
依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-core</artifactId>
<version>2.1.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
<version>2.1.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.7.0</version>
</dependency>
applicatoin.yml配置
spring:
redis:
port: 6379
host: localhost
password:
lettuce:
pool:
min-idle: 2
max-active: 8
session:
store-type: redis
二. 退出登录
.logout() //
.logoutSuccessUrl("/login.html") //退出后跳转的页面
.and()
退出登录网页链接
<a href="/logout">退出</a>
网友评论