美文网首页后端之路框架建设收集
四 . Spring Security session管理

四 . Spring Security session管理

作者: 任未然 | 来源:发表于2019-10-19 18:34 被阅读0次

一. 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>

相关文章

网友评论

    本文标题:四 . Spring Security session管理

    本文链接:https://www.haomeiwen.com/subject/gwjnmctx.html