Quellcode durchsuchen

fix:登录服务的代码优化

wangzaijun vor 7 Monaten
Ursprung
Commit
af5b11db88

+ 4 - 22
service-manage/src/main/java/com/simuwang/manage/api/LoginController.java

@@ -1,22 +1,16 @@
 package com.simuwang.manage.api;
 
 import cn.hutool.core.map.MapUtil;
-import com.simuwang.base.common.util.ServletUtils;
 import com.simuwang.base.pojo.dto.sys.UserUpdatePwdCmd;
 import com.simuwang.logging.SystemLog;
 import com.simuwang.manage.dto.LoginUser;
 import com.simuwang.manage.dto.UserInfoVO;
 import com.simuwang.manage.service.LoginService;
-import com.simuwang.shiro.core.ShiroToken;
-import com.simuwang.shiro.core.ShiroUser;
 import com.simuwang.shiro.core.jwt.JwtContext;
-import com.simuwang.shiro.utils.UserUtils;
 import com.smppw.common.pojo.ResultVo;
 import com.smppw.common.pojo.enums.status.ResultCode;
 import jakarta.servlet.http.HttpServletResponse;
 import jakarta.validation.Valid;
-import org.apache.shiro.SecurityUtils;
-import org.apache.shiro.subject.Subject;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.Map;
@@ -24,15 +18,12 @@ import java.util.Map;
 /**
  * 登录相关接口
  */
-@SystemLog(value = "登录")
 @RestController
 @RequestMapping("/v1")
 public class LoginController {
-    private final JwtContext jwtContext;
     private final LoginService loginService;
 
-    public LoginController(JwtContext jwtContext, LoginService loginService) {
-        this.jwtContext = jwtContext;
+    public LoginController(LoginService loginService) {
         this.loginService = loginService;
     }
 
@@ -57,12 +48,7 @@ public class LoginController {
     @SystemLog(value = "登录", type = SystemLog.Type.LOGIN)
     @PostMapping("login")
     public ResultVo<String> login(@RequestBody LoginUser loginUser, HttpServletResponse response) {
-        ShiroToken shiroToken = new ShiroToken(loginUser.getUsername(), loginUser.getPassword());
-        Subject subject = SecurityUtils.getSubject();
-        subject.login(shiroToken);
-
-        String requestIp = ServletUtils.getIpAddr();
-        String token = this.jwtContext.generateToken(loginUser.getUsername(), requestIp);
+        String token = this.loginService.login(loginUser);
         response.setHeader(JwtContext.HEADER, token);
         response.setHeader("Access-control-Expost-Headers", JwtContext.HEADER);
         return ResultVo.ok(ResultCode.SUCCESS.getCode(), "登录成功", token);
@@ -74,12 +60,7 @@ public class LoginController {
     @SystemLog(value = "登出", type = SystemLog.Type.LOGOUT)
     @PostMapping("/logout")
     public ResultVo<Boolean> logout() {
-        Subject subject = SecurityUtils.getSubject();
-        ShiroUser shiroUser = UserUtils.getLoginUser();
-        String requestIp = ServletUtils.getIpAddr();
-        this.jwtContext.cleanUserCache(shiroUser.getUsername(), requestIp);
-        subject.logout();
-        return ResultVo.ok(ResultCode.SUCCESS.getCode(), "退出成功", true);
+        return ResultVo.ok(ResultCode.SUCCESS.getCode(), "退出成功", this.loginService.logout());
     }
 
     /**
@@ -87,6 +68,7 @@ public class LoginController {
      *
      * @return 当前登录用户的角色权限信息
      */
+//    @SystemLog(value = "获取当前登录用户信息")
     @GetMapping("/user-info")
     public UserInfoVO getUserInfo() {
         return this.loginService.getUserInfo();

+ 37 - 1
service-manage/src/main/java/com/simuwang/manage/service/LoginService.java

@@ -5,6 +5,7 @@ import cn.hutool.core.util.StrUtil;
 import cn.hutool.crypto.asymmetric.KeyType;
 import cn.hutool.crypto.asymmetric.RSA;
 import com.simuwang.base.common.exception.APIException;
+import com.simuwang.base.common.util.ServletUtils;
 import com.simuwang.base.common.util.TreeUtil;
 import com.simuwang.base.components.UserAuthService;
 import com.simuwang.base.config.DaqProperties;
@@ -12,11 +13,16 @@ import com.simuwang.base.pojo.dos.sys.SysMenuDO;
 import com.simuwang.base.pojo.dos.sys.SysRoleDO;
 import com.simuwang.base.pojo.dos.sys.SysUserDO;
 import com.simuwang.base.pojo.dto.sys.UserUpdatePwdCmd;
+import com.simuwang.manage.dto.LoginUser;
 import com.simuwang.manage.dto.MenuTreeDTO;
 import com.simuwang.manage.dto.UserInfoVO;
 import com.simuwang.manage.dto.UserRoleDTO;
+import com.simuwang.shiro.core.ShiroToken;
 import com.simuwang.shiro.core.ShiroUser;
+import com.simuwang.shiro.core.jwt.JwtContext;
 import com.simuwang.shiro.utils.UserUtils;
+import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.subject.Subject;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
@@ -34,10 +40,12 @@ import java.util.stream.Collectors;
 public class LoginService {
     private final Logger logger = LoggerFactory.getLogger(this.getClass());
 
+    private final JwtContext jwtContext;
     private final DaqProperties properties;
     private final UserAuthService userAuthService;
 
-    public LoginService(DaqProperties properties, UserAuthService userAuthService) {
+    public LoginService(JwtContext jwtContext, DaqProperties properties, UserAuthService userAuthService) {
+        this.jwtContext = jwtContext;
         this.properties = properties;
         this.userAuthService = userAuthService;
     }
@@ -47,6 +55,34 @@ public class LoginService {
     }
 
     /**
+     * 登录业务
+     *
+     * @param loginUser 登录用户密码
+     * @return /
+     */
+    public String login(LoginUser loginUser) {
+        ShiroToken shiroToken = new ShiroToken(loginUser.getUsername(), loginUser.getPassword());
+        Subject subject = SecurityUtils.getSubject();
+        subject.login(shiroToken);
+        String requestIp = ServletUtils.getIpAddr();
+        return this.jwtContext.generateToken(loginUser.getUsername(), requestIp);
+    }
+
+    /**
+     * 登出
+     *
+     * @return /
+     */
+    public boolean logout() {
+        Subject subject = SecurityUtils.getSubject();
+        ShiroUser shiroUser = UserUtils.getLoginUser();
+        String requestIp = ServletUtils.getIpAddr();
+        this.jwtContext.cleanUserCache(shiroUser.getUsername(), requestIp);
+        subject.logout();
+        return true;
+    }
+
+    /**
      * 获取当前用户的权限角色信息
      *
      * @return /