全局登录态处理

This commit is contained in:
zhangchenbiao
2023-06-14 15:49:52 +08:00
parent 601f28b31e
commit 40c99a8337
9 changed files with 77 additions and 47 deletions

View File

@@ -1,30 +0,0 @@
package com.cool.store.context;
import com.alibaba.fastjson.JSON;
import org.apache.commons.lang3.StringUtils;
/**
*
*/
public class CurrentUserContext {
private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();
public static CurrentUser getUser() {
String userStr = contextHolder.get();
if (StringUtils.isNotBlank(userStr)) {
return JSON.parseObject(userStr, CurrentUser.class);
}
return new CurrentUser();
}
public static void setUser(String user) {
contextHolder.set(user);
}
public static void removeUser(){
contextHolder.remove();
}
}

View File

@@ -0,0 +1,54 @@
package com.cool.store.context;
import com.alibaba.fastjson.JSON;
import com.cool.store.entity.SysRoleDO;
import com.cool.store.enums.ErrorCodeEnum;
import com.cool.store.exception.ServiceException;
import org.apache.commons.lang3.SerializationException;
import org.apache.commons.lang3.StringUtils;
import java.util.Optional;
/**
* 当前登录用户信息
*/
public class CurrentUserHolder {
private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();
public static LoginUserInfo getUser() {
String userStr = contextHolder.get();
if (StringUtils.isNotBlank(userStr)) {
return JSON.parseObject(userStr, LoginUserInfo.class);
}
return new LoginUserInfo();
}
public static void setUser(String user) {
contextHolder.set(user);
}
public static void removeUser(){
contextHolder.remove();
}
/**
* 仅登录态可获取
* @return
*/
public static String getUserId(){
LoginUserInfo user = getUser();
return Optional.ofNullable(user).map(o->o.getUserId()).orElseThrow(()->new ServiceException(ErrorCodeEnum.ACCESS_TOKEN_INVALID));
}
/**
* 仅登录态可获取
* @return
*/
public static String getRoleId(){
LoginUserInfo user = getUser();
return Optional.ofNullable(user).map(LoginUserInfo::getSysRole).map(SysRoleDO::getRoleId).orElse(null);
}
}

View File

@@ -4,7 +4,7 @@ import com.cool.store.entity.SysRoleDO;
import lombok.Data; import lombok.Data;
@Data @Data
public class CurrentUser { public class LoginUserInfo {
private String userId; private String userId;
@@ -29,5 +29,5 @@ public class CurrentUser {
*/ */
private String avatar; private String avatar;
private SysRoleDO sysRoleDO; private SysRoleDO sysRole;
} }

View File

@@ -12,5 +12,11 @@ import java.util.List;
*/ */
public interface MenuService { public interface MenuService {
List<MenuTreeVO> getUserMenus(String userId); /**
* 获取用户某个角色的菜单
* @param userId
* @param roleId
* @return
*/
List<MenuTreeVO> getUserMenus(String userId, String roleId);
} }

View File

@@ -1,9 +1,8 @@
package com.cool.store.service.impl; package com.cool.store.service.impl;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.cool.store.constants.CommonConstants; import com.cool.store.constants.CommonConstants;
import com.cool.store.context.CurrentUser; import com.cool.store.context.LoginUserInfo;
import com.cool.store.context.DataSourceContext; import com.cool.store.context.DataSourceContext;
import com.cool.store.dao.*; import com.cool.store.dao.*;
import com.cool.store.dto.login.RefreshUser; import com.cool.store.dto.login.RefreshUser;
@@ -51,7 +50,7 @@ public class LoginServiceImpl implements LoginService {
if (StringUtils.isEmpty(userId)) { if (StringUtils.isEmpty(userId)) {
throw new ServiceException(ErrorCodeEnum.USER_NOT_EXIST); throw new ServiceException(ErrorCodeEnum.USER_NOT_EXIST);
} }
CurrentUser currentUser = new CurrentUser(); LoginUserInfo currentUser = new LoginUserInfo();
RefreshUser refreshUser = new RefreshUser(); RefreshUser refreshUser = new RefreshUser();
// 查企业用户 // 查企业用户
EnterpriseUserDO enterpriseUser = enterpriseUserDAO.getUserInfoById(userId); EnterpriseUserDO enterpriseUser = enterpriseUserDAO.getUserInfoById(userId);
@@ -76,7 +75,7 @@ public class LoginServiceImpl implements LoginService {
enterpriseUser.setFaceUrl(finalAvatar); enterpriseUser.setFaceUrl(finalAvatar);
currentUser.setUserId(enterpriseUser.getUserId()); currentUser.setUserId(enterpriseUser.getUserId());
currentUser.setIsAdmin(enterpriseUser.getIsAdmin()); currentUser.setIsAdmin(enterpriseUser.getIsAdmin());
currentUser.setSysRoleDO(sysRole); currentUser.setSysRole(sysRole);
currentUser.setCorpId(corpId); currentUser.setCorpId(corpId);
currentUser.setAvatar(enterpriseUser.getAvatar()); currentUser.setAvatar(enterpriseUser.getAvatar());
//生成令牌 //生成令牌

View File

@@ -24,7 +24,7 @@ public class MenuServiceImpl implements MenuService {
private SysMenuDAO sysMenuDAO; private SysMenuDAO sysMenuDAO;
@Override @Override
public List<MenuTreeVO> getUserMenus(String userId) { public List<MenuTreeVO> getUserMenus(String userId, String roleId) {
List<SysMenuDO> menuList= sysMenuDAO.selectMenuAll(null, PlatFormTypeEnum.PC.getCode()); List<SysMenuDO> menuList= sysMenuDAO.selectMenuAll(null, PlatFormTypeEnum.PC.getCode());
return MenuTreeVO.dealMenuTree(CommonConstants.ZERO_LONG, menuList); return MenuTreeVO.dealMenuTree(CommonConstants.ZERO_LONG, menuList);
} }

View File

@@ -3,9 +3,9 @@ package com.cool.store.config;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.cool.store.enums.ErrorCodeEnum; import com.cool.store.enums.ErrorCodeEnum;
import com.cool.store.response.ResponseResult; import com.cool.store.response.ResponseResult;
import com.cool.store.context.CurrentUserContext; import com.cool.store.context.CurrentUserHolder;
import com.cool.store.utils.RedisUtilPool; import com.cool.store.utils.RedisUtilPool;
import com.cool.store.context.CurrentUser; import com.cool.store.context.LoginUserInfo;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
@@ -72,14 +72,14 @@ public class TokenValidateFilter implements Filter {
String uri = reqs.getRequestURI(); String uri = reqs.getRequestURI();
String method = reqs.getMethod(); String method = reqs.getMethod();
String userStr = ""; String userStr = "";
CurrentUser currentUser = null; LoginUserInfo currentUser = null;
boolean isInWhiteList = excludePath(uri); boolean isInWhiteList = excludePath(uri);
String accessToken = reqs.getHeader("accessToken"); String accessToken = reqs.getHeader("accessToken");
String key = "access_token:" + accessToken; String key = "access_token:" + accessToken;
if(StringUtils.isNotBlank(accessToken)){ if(StringUtils.isNotBlank(accessToken)){
userStr = redisUtilPool.getString(key); userStr = redisUtilPool.getString(key);
if(StringUtils.isNotBlank(userStr)){ if(StringUtils.isNotBlank(userStr)){
currentUser = JSON.parseObject(userStr, CurrentUser.class); currentUser = JSON.parseObject(userStr, LoginUserInfo.class);
} }
} }
log.info("url:{}", uri); log.info("url:{}", uri);
@@ -105,10 +105,10 @@ public class TokenValidateFilter implements Filter {
return; return;
} }
try { try {
CurrentUserContext.setUser(userStr); CurrentUserHolder.setUser(userStr);
filterChain.doFilter(servletRequest, servletResponse); filterChain.doFilter(servletRequest, servletResponse);
} finally { } finally {
CurrentUserContext.removeUser(); CurrentUserHolder.removeUser();
} }
} }

View File

@@ -1,7 +1,7 @@
package com.cool.store.controller; package com.cool.store.controller;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.cool.store.context.CurrentUserContext; import com.cool.store.context.CurrentUserHolder;
import com.cool.store.dto.login.FeiShuLoginDTO; import com.cool.store.dto.login.FeiShuLoginDTO;
import com.cool.store.dto.login.UserIdInfoDTO; import com.cool.store.dto.login.UserIdInfoDTO;
import com.cool.store.enums.ErrorCodeEnum; import com.cool.store.enums.ErrorCodeEnum;
@@ -59,7 +59,7 @@ public class LoginController {
@GetMapping("/getUserInfoByToken") @GetMapping("/getUserInfoByToken")
public ResponseResult getUserInfoByToken(){ public ResponseResult getUserInfoByToken(){
return ResponseResult.success(CurrentUserContext.getUser()); return ResponseResult.success(CurrentUserHolder.getUser());
} }
} }

View File

@@ -1,5 +1,6 @@
package com.cool.store.controller; package com.cool.store.controller;
import com.cool.store.context.CurrentUserHolder;
import com.cool.store.response.ResponseResult; import com.cool.store.response.ResponseResult;
import com.cool.store.service.MenuService; import com.cool.store.service.MenuService;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
@@ -21,7 +22,7 @@ public class MenuController {
@GetMapping("/menu/getUserMenus") @GetMapping("/menu/getUserMenus")
public ResponseResult getUserMenus(){ public ResponseResult getUserMenus(){
return ResponseResult.success(menuService.getUserMenus(null)); return ResponseResult.success(menuService.getUserMenus(CurrentUserHolder.getUserId(), CurrentUserHolder.getRoleId()));
} }
} }