session并发登录处理

This commit is contained in:
winLsy
2018-01-17 18:52:48 +08:00
parent b4cc49db4f
commit 82be6bbf69
4 changed files with 31 additions and 1 deletions
@@ -14,4 +14,7 @@
- 第三方登陆时,当用户不存在的时候,如果想要系统自动注册一个用户,不进行跳转的话。声明一个类似于demo项目中DemoConnectionSignUp
样的组件进行自己用户体系的注册。这里的注册指的是创建本系统自己的用户体系,第三方的用户体系springSocial会自动帮助我们创建。授权后
直接跳转到域名首页
### session管理
- session过期的处理 @GetMapping("/session/invalid")
- 用户并发登录的处理MsExpiredSessionStrategy
@@ -1,5 +1,6 @@
package com.micro.fast.security.browser.config;
import com.micro.fast.security.browser.session.MsExpiredSessionStrategy;
import com.micro.fast.security.core.authentication.mobile.SmsCodeAuthenticationSecurityConfig;
import com.micro.fast.security.core.master.SecurityConstants;
import com.micro.fast.security.core.master.SecurityProperties;
@@ -122,6 +123,13 @@ public class BrowserSecurityConfig extends WebSecurityConfigurerAdapter {
.sessionManagement()
//定义session过期的时候处理的url
.invalidSessionUrl("/session/invalid")
//session存在的最大数量
.maximumSessions(1)
//设置session被替换掉时处理逻辑
.expiredSessionStrategy(new MsExpiredSessionStrategy())
//设置不允许第二个用户登录,不设置这句话的话,会替换掉上一个登录用户
.maxSessionsPreventsLogin(true)
.and()
.and()
.authorizeRequests()//下面是权限配置
//当访问这个页面的时候不进行身份认证,对用户自定义的登录页也不进行权限认证
@@ -0,0 +1,19 @@
package com.micro.fast.security.browser.session;
import org.springframework.security.web.session.SessionInformationExpiredEvent;
import org.springframework.security.web.session.SessionInformationExpiredStrategy;
import javax.servlet.ServletException;
import java.io.IOException;
/**
* 处理session顶替的策略
* @author lsy
*/
public class MsExpiredSessionStrategy implements SessionInformationExpiredStrategy {
@Override
public void onExpiredSessionDetected(SessionInformationExpiredEvent sessionInformationExpiredEvent) throws IOException, ServletException {
sessionInformationExpiredEvent.getResponse().setContentType("application/json;charset=UTF-8");
sessionInformationExpiredEvent.getResponse().getWriter().write("并发登录");
}
}
@@ -24,5 +24,5 @@ ms:
server:
session:
# 超时时间,单位是秒,但是不能小于一分钟
timeout: 120
timeout: 600