Browse Source

加入登录

wangliang 1 year ago
parent
commit
91581d107b

+ 8 - 0
sop-business/src/main/java/com/qmth/sop/business/service/SysUserService.java

@@ -27,4 +27,12 @@ public interface SysUserService extends IService<SysUser> {
      * @throws NoSuchAlgorithmException
      */
     public LoginResult login(String password, SysUser sysUser, AppSourceEnum appSource) throws NoSuchAlgorithmException;
+
+    /**
+     * 删除用户信息
+     *
+     * @param userId
+     * @param all
+     */
+    public void removeUserInfo(Long userId, boolean all) throws NoSuchAlgorithmException;
 }

+ 38 - 2
sop-business/src/main/java/com/qmth/sop/business/service/impl/SysUserServiceImpl.java

@@ -24,6 +24,7 @@ import org.springframework.stereotype.Service;
 import javax.annotation.Resource;
 import java.security.NoSuchAlgorithmException;
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -64,9 +65,12 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
                 roleTypes.add(s.getType().name());
             }
         }
-        String sessionId = SessionUtil.digest(sysUser.getId(), Math.abs(roleNamesSet.toString().hashCode()), platform.name());
+        List<String> roleNames = new ArrayList<>(roleNamesSet);
+        Collections.sort(roleNames);
+
+        String sessionId = SessionUtil.digest(sysUser.getId(), Math.abs(roleNames.toString().hashCode()), platform.name());
         ExpireTimeBean expireTime = AuthUtil.getExpireTime(platform);
-        TBSession tbSession = new TBSession(sessionId, String.valueOf(sysUser.getId()), roleNamesSet.toString(),
+        TBSession tbSession = new TBSession(sessionId, String.valueOf(sysUser.getId()), roleNames.toString(),
                 platform.name(), platform.name(), deviceId, IpUtil.getRemoteIp(), token,
                 expireTime.getDate().getTime(), appSource);
         tbSessionService.saveOrUpdate(tbSession);
@@ -76,4 +80,36 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         loginResult.setOrgInfo(Objects.nonNull(authBean.getOrg()) ? loginResult.new OrgNativeBean(authBean.getOrg()) : null);
         return loginResult;
     }
+
+    /**
+     * 删除用户信息
+     *
+     * @param userId
+     * @param all
+     */
+    @Override
+    public void removeUserInfo(Long userId, boolean all) throws NoSuchAlgorithmException {
+        AuthBean authBean = commonCacheService.userAuthCache(userId);
+        Optional.ofNullable(authBean).orElseThrow(() -> ExceptionResultEnum.NOT_LOGIN.exception());
+        if (all) {
+            for (Platform p : Platform.values()) {
+                Set<String> roleNamesSet = authBean.getRoleList().stream().map(s -> s.getName()).collect(Collectors.toSet());
+                List<String> roleNames = new ArrayList<>(roleNamesSet);
+                Collections.sort(roleNames);
+                String sessionId = SessionUtil.digest(userId, Math.abs(roleNames.toString().hashCode()), p.name());
+                tbSessionService.removeById(sessionId);
+                commonCacheService.deleteUserSession(sessionId);
+            }
+        } else {
+            Set<String> roleNamesSet = authBean.getRoleList().stream().map(s -> s.getName()).collect(Collectors.toSet());
+            List<String> roleNames = new ArrayList<>(roleNamesSet);
+            Collections.sort(roleNames);
+            String sessionId = SessionUtil.digest(userId, Math.abs(roleNames.toString().hashCode()), Platform.WEB.name());
+            tbSessionService.removeById(sessionId);
+            commonCacheService.deleteUserSession(sessionId);
+        }
+        commonCacheService.removeUserCache(userId);
+        commonCacheService.removeUserAuthCache(userId);
+        commonCacheService.removeUserRolePrivilegeCache(userId);
+    }
 }

+ 3 - 1
sop-common/src/main/java/com/qmth/sop/common/enums/RoleTypeEnum.java

@@ -7,7 +7,9 @@ package com.qmth.sop.common.enums;
  */
 public enum RoleTypeEnum {
 
-    ADMIN("系统管理员");
+    ADMIN("系统管理员"),
+
+    ORG_ADMIN("机构管理员");
 
     RoleTypeEnum(String desc) {
         this.desc = desc;

+ 36 - 6
sop-server/src/main/java/com/qmth/sop/server/api/SysController.java

@@ -16,6 +16,7 @@ import com.qmth.sop.common.enums.ExceptionResultEnum;
 import com.qmth.sop.common.enums.LoginTypeEnum;
 import com.qmth.sop.common.util.Result;
 import com.qmth.sop.common.util.ResultUtil;
+import com.qmth.sop.common.util.ServletUtil;
 import io.swagger.annotations.*;
 import org.springframework.util.CollectionUtils;
 import org.springframework.validation.BindingResult;
@@ -50,12 +51,6 @@ public class SysController {
     @Resource
     CommonCacheService commonCacheService;
 
-    /**
-     * 登录
-     *
-     * @param login
-     * @return
-     */
     @ApiOperation(value = "登录")
     @RequestMapping(value = "/login", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "用户信息", response = LoginResult.class)})
@@ -104,4 +99,39 @@ public class SysController {
         Optional.ofNullable(sysUser).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("未查询到用户"));
         return ResultUtil.ok(sysUserService.login(login.getPassword(), sysUser, AppSourceEnum.SYSTEM));
     }
+
+    /**
+     * 登出
+     *
+     * @return
+     */
+    @ApiOperation(value = "登出")
+    @RequestMapping(value = "/logout", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = Object.class)})
+    public Result logout() throws NoSuchAlgorithmException {
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+        sysUserService.removeUserInfo(sysUser.getId(), false);
+        return ResultUtil.ok();
+    }
+
+    @ApiOperation(value = "测试1")
+    @RequestMapping(value = "/test1", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "用户信息", response = LoginResult.class)})
+    public Result test1() {
+        return ResultUtil.ok("测试1");
+    }
+
+    @ApiOperation(value = "测试2")
+    @RequestMapping(value = "/test2", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "用户信息", response = LoginResult.class)})
+    public Result test2() {
+        return ResultUtil.ok("测试2");
+    }
+
+    @ApiOperation(value = "测试3")
+    @RequestMapping(value = "/test3", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "用户信息", response = LoginResult.class)})
+    public Result test3() {
+        return ResultUtil.ok("测试3");
+    }
 }

+ 4 - 1
sop-server/src/main/java/com/qmth/sop/server/auth/SopServerSession.java

@@ -6,9 +6,11 @@ import com.qmth.sop.business.cache.CommonCacheService;
 import com.qmth.sop.business.entity.SysUser;
 import com.qmth.sop.business.entity.TBSession;
 import com.qmth.sop.common.contant.SpringContextHolder;
+import com.qmth.sop.common.enums.ExceptionResultEnum;
 
 import java.util.Collection;
 import java.util.Objects;
+import java.util.Optional;
 import java.util.StringJoiner;
 
 public class SopServerSession implements AccessEntity {
@@ -35,7 +37,8 @@ public class SopServerSession implements AccessEntity {
     public String getSecret() {
         CommonCacheService commonCacheService = SpringContextHolder.getBean(CommonCacheService.class);
         TBSession tbSession = (TBSession) commonCacheService.getUserSession(identity);
-        return Objects.nonNull(tbSession) ? tbSession.getAccessToken() : null;
+        Optional.ofNullable(tbSession).orElseThrow(() -> ExceptionResultEnum.NOT_LOGIN.exception());
+        return tbSession.getAccessToken();
     }
 
     @Override