From e57502b16c8e46f7f96430afeeb95e981251bcc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E4=BC=9F=E5=8D=8E?= Date: Thu, 5 Dec 2019 11:15:02 +0800 Subject: [PATCH] =?UTF-8?q?1.=E6=96=B0=E5=A2=9E=E5=8D=95=E7=82=B9=E7=99=BB?= =?UTF-8?q?=E5=BD=95=EF=BC=8C=E5=A4=9A=E8=AE=BE=E5=A4=87=E7=99=BB=E5=BD=95?= =?UTF-8?q?=EF=BC=8C=E4=BB=A5=E6=9C=80=E5=90=8E=E7=99=BB=E5=BD=95=E4=B8=BA?= =?UTF-8?q?=E5=87=86=EF=BC=8C=E4=B9=8B=E5=89=8D=E7=9A=84=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E9=83=BD=E4=BC=9A=E8=A2=AB=E8=B8=A2=E6=8E=89=EF=BC=8C=E5=8F=AF?= =?UTF-8?q?=E4=BB=A5=E4=BD=BF=E7=94=A8single.login=20=3Dfalse=20=E5=85=B3?= =?UTF-8?q?=E9=97=AD=202.=E9=BB=98=E8=AE=A4=E5=BC=80=E5=90=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/security/rest/AuthController.java | 6 ++++ .../security/service/OnlineUserService.java | 28 +++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/security/rest/AuthController.java b/eladmin-system/src/main/java/me/zhengjie/modules/security/rest/AuthController.java index 85a488a8..34c05e5b 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/security/rest/AuthController.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/security/rest/AuthController.java @@ -48,6 +48,8 @@ public class AuthController { private Long expiration; @Value("${rsa.private_key}") private String privateKey; + @Value("${single.login:true}") + private Boolean singleLogin; private final SecurityProperties properties; private final RedisUtils redisUtils; private final UserDetailsService userDetailsService; @@ -97,6 +99,10 @@ public class AuthController { put("token", properties.getTokenStartWith() + token); put("user", jwtUser); }}; + if(singleLogin){ + //踢掉之前已经登录的token + onlineUserService.checkLoginOnUser(authUser.getUsername(),token); + } return ResponseEntity.ok(authInfo); } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/security/service/OnlineUserService.java b/eladmin-system/src/main/java/me/zhengjie/modules/security/service/OnlineUserService.java index 8957e41a..21d2bcab 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/security/service/OnlineUserService.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/security/service/OnlineUserService.java @@ -1,5 +1,6 @@ package me.zhengjie.modules.security.service; +import lombok.extern.slf4j.Slf4j; import me.zhengjie.modules.security.config.SecurityProperties; import me.zhengjie.modules.security.security.vo.JwtUser; import me.zhengjie.modules.security.security.vo.OnlineUser; @@ -16,6 +17,7 @@ import java.util.*; * @Date 2019年10月26日21:56:27 */ @Service +@Slf4j public class OnlineUserService { private final SecurityProperties properties; @@ -131,4 +133,30 @@ public class OnlineUserService { public OnlineUser getOne(String key) { return (OnlineUser)redisUtils.get(key); } + + /** + * 检测用户是否在之前已经登录,已经登录踢下线 + * @param userName + */ + public void checkLoginOnUser(String userName, String igoreToken){ + List onlineUsers = getAll(userName); + if(onlineUsers ==null || onlineUsers.isEmpty()){ + return; + } + for(OnlineUser onlineUser:onlineUsers){ + if(onlineUser.getUserName().equals(userName)){ + try { + String token =EncryptUtils.desDecrypt(onlineUser.getKey()); + if(StringUtils.isNotBlank(igoreToken)&&!igoreToken.equals(token)){ + this.kickOut(onlineUser.getKey()); + }else if(StringUtils.isBlank(igoreToken)){ + this.kickOut(onlineUser.getKey()); + } + } catch (Exception e) { + log.error("checkUser is error",e); + } + } + } + } + }