소스 검색

退出系统时,同时将登陆人的多端登录信息同时退出

徐滕 2 일 전
부모
커밋
cb33352952
1개의 변경된 파일8개의 추가작업 그리고 0개의 파일을 삭제
  1. 8 0
      jeeplus-auth/src/main/java/com/jeeplus/auth/controller/LoginController.java

+ 8 - 0
jeeplus-auth/src/main/java/com/jeeplus/auth/controller/LoginController.java

@@ -290,6 +290,7 @@ public class LoginController {
     @GetMapping("/logout")
     public ResponseEntity logout(HttpServletRequest request, HttpServletResponse response) {
         Authentication auth = SecurityUtils.getAuthentication ( );
+        UserDTO currentUserDTO = SecurityUtils.getCurrentUserDTO();
         if ( auth != null ) {
             userApi.clearCache ( SecurityUtils.getCurrentUserDTO ( ) );
             String token = TokenProvider.resolveToken ( request );
@@ -297,6 +298,13 @@ public class LoginController {
             redisUtils.delete ( CacheNames.USER_CACHE_ONLINE_USERS, token );
             new SecurityContextLogoutHandler ( ).logout ( request, response, auth );
         }
+        //查询系统中是否存在相同登录名的其他登录信息。若存在,则将其他信息同时进行下线处理
+        List<UserDTO> onLineUserList = SpringUtil.getBean(IUserApi.class).getOnLineUserList(currentUserDTO.getLoginName(), "");
+        for (UserDTO userDTO : onLineUserList) {
+            userApi.clearCache ( userDTO );
+            redisUtils.delete ( CacheNames.USER_CACHE_TOKEN, userDTO.getToken() );
+            redisUtils.delete ( CacheNames.USER_CACHE_ONLINE_USERS, userDTO.getToken() );
+        }
         return ResponseEntity.ok ( "退出成功" );
     }