From 5d2cfd4562f74496a5263db3451c1e78ff53aead Mon Sep 17 00:00:00 2001
From: heheng <475597332@qq.com>
Date: 星期四, 27 三月 2025 08:44:16 +0800
Subject: [PATCH] 单据增加查询返回字段

---
 assess-framework/src/main/java/com/gkhy/assess/framework/shiro/service/SysLoginService.java |   59 ++++++++++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 42 insertions(+), 17 deletions(-)

diff --git a/assess-framework/src/main/java/com/gkhy/assess/framework/shiro/service/SysLoginService.java b/assess-framework/src/main/java/com/gkhy/assess/framework/shiro/service/SysLoginService.java
index a6676c0..f2a37b9 100644
--- a/assess-framework/src/main/java/com/gkhy/assess/framework/shiro/service/SysLoginService.java
+++ b/assess-framework/src/main/java/com/gkhy/assess/framework/shiro/service/SysLoginService.java
@@ -1,8 +1,9 @@
 package com.gkhy.assess.framework.shiro.service;
 
 import com.gkhy.assess.common.constant.CacheConstant;
+import com.gkhy.assess.common.enums.ApproveStatusEnum;
+import com.gkhy.assess.common.enums.UserIdentityEnum;
 import com.gkhy.assess.common.enums.UserStatusEnum;
-import com.gkhy.assess.common.exception.ApiException;
 import com.gkhy.assess.common.utils.JwtTokenUtil;
 import com.gkhy.assess.common.utils.RedisUtils;
 import com.gkhy.assess.system.domain.SysUser;
@@ -13,6 +14,7 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import javax.servlet.http.HttpServletRequest;
 import java.time.LocalDateTime;
 
 @Component
@@ -23,9 +25,11 @@
     private SysPasswordService passwordService;
     @Autowired
     private RedisUtils redisUtils;
+    @Autowired
+    private HttpServletRequest request;
 
-    public SysUser login(String username, String password) {
-        SysUser sysUser=sysUserService.getUserByUsernamePhone(username);
+    public SysUser login(String username, String password,Integer identity) {
+        SysUser sysUser=sysUserService.getUserByUsernamePhone(username,identity);
         validUser(sysUser);
         passwordService.validate(sysUser,password);
         recordLoginInfo(sysUser.getId());
@@ -34,25 +38,45 @@
 
     public void validUser(SysUser sysUser){
         if(sysUser==null) {
-            throw new ApiException("用户不存在");
+            throw new AuthenticationException("用户不存在");
+        }
+        String uri=request.getRequestURI();
+        if(uri.startsWith("/api/system")){
+            if(UserIdentityEnum.EXPERT.getCode().equals(sysUser.getIdentity())){
+                throw new AuthenticationException("专家用户无权登录后台");
+            }
+        }else if(uri.startsWith("/api/app/")){
+            if(!UserIdentityEnum.EXPERT.getCode().equals(sysUser.getIdentity())){
+                throw new AuthenticationException("只有专家用户才能登录APP");
+            }
         }
         if(UserStatusEnum.DELETED.getCode().equals(sysUser.getDelFlag())){
-            throw new ApiException("用户已被删除");
+            throw new AuthenticationException("用户已被删除");
         }
         if(UserStatusEnum.DISABLE.getCode().equals(sysUser.getStatus())){
-            throw new ApiException("用户已被停用");
+            throw new AuthenticationException("用户已被停用");
         }
+//        if(UserIdentityEnum.AGENCY.getCode().equals(sysUser.getIdentity())){
+//            if(!ApproveStatusEnum.APPROVED.getCode().equals(sysUser.getState())){
+//                throw new AuthenticationException("机构账户审批还未通过");
+//            }
+//        }
     }
 
     public SysUser validJwtToken(String jwtToken){
+
         String username= JwtTokenUtil.getUsername(jwtToken);
-        if(StringUtils.isEmpty(username)){
+        Integer identity=JwtTokenUtil.getIdentity(jwtToken);
+        if(StringUtils.isEmpty(username)||identity==null){
             throw new AuthenticationException("token非法无效!");
         }
-        SysUser sysUser=sysUserService.getUserByUsernamePhone(username);
+        SysUser sysUser=sysUserService.getUserByUsernamePhone(username,identity);
         validUser(sysUser);
-        if(!jwtTokenRefresh(jwtToken,username,sysUser.getPassword())){
-            throw new AuthenticationException("Token失效,请重新登录!");
+        if(!JwtTokenUtil.verify(jwtToken,username,sysUser.getPassword(),identity)){
+            throw new AuthenticationException("token非法无效!");
+        }
+        if(!jwtTokenRefresh(jwtToken,username,sysUser.getPassword(),identity)){
+            throw new AuthenticationException("您的账号登录过期,请重新登录!");
         }
      //   setRolePermission(sysUser);
         return sysUser;
@@ -71,16 +95,17 @@
      * @param passWord
      * @return
      */
-    public boolean jwtTokenRefresh(String jwtToken,String username,String passWord){
-        String key=redisUtils.generateKey(CacheConstant.SYS_USER_TOKEN+":"+JwtTokenUtil.md5Encode(jwtToken));
-        String cacheToken= (String) redisUtils.get(key);
+    public boolean jwtTokenRefresh(String jwtToken, String username, String passWord, Integer identity){
+        String tokenKey=redisUtils.generateKey(CacheConstant.SYS_USER_TOKEN+":"+JwtTokenUtil.md5Encode(jwtToken));
+      //  String userKey=redisUtils.generateKey(CacheConstant.SYS_USER_TOKEN+":"+username+"_"+identity);
+        String cacheToken= (String) redisUtils.get(tokenKey);
         if(StringUtils.isNotEmpty(cacheToken)){
             // 校验token有效性
-            if(!JwtTokenUtil.verify(cacheToken,username,passWord)){
-                String newToken=JwtTokenUtil.sign(username,passWord);
+            if(!JwtTokenUtil.isNeedUpdate(cacheToken,username,passWord,identity)){
+                String newToken=JwtTokenUtil.sign(username,passWord,identity);
                 // 设置超时时间
-                redisUtils.set(key,newToken);
-                redisUtils.expire(key,JwtTokenUtil.EXPIRATION*2/1000);
+                redisUtils.set(tokenKey,newToken,JwtTokenUtil.EXPIRATION*2/1000);
+               // redisUtils.expire(userKey,(JwtTokenUtil.EXPIRATION*2/1000)+2);
             }
             return true;
         }

--
Gitblit v1.9.2