From 28aaf2ffa1dbb860a292ba330a7e9362e60e7832 Mon Sep 17 00:00:00 2001
From: kongzy <kongzy>
Date: Fri, 12 Jul 2024 16:41:03 +0800
Subject: [PATCH] update
---
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