diff --git a/src/main/java/com/supervision/config/JwtInterceptor.java b/src/main/java/com/supervision/config/JwtInterceptor.java index cd2e3e7..9e413f9 100644 --- a/src/main/java/com/supervision/config/JwtInterceptor.java +++ b/src/main/java/com/supervision/config/JwtInterceptor.java @@ -5,6 +5,7 @@ import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import cn.hutool.jwt.JWT; import cn.hutool.jwt.JWTUtil; +import com.supervision.police.dto.user.UserInfoDTO; import com.supervision.utils.TokenUtil; import jakarta.servlet.http.Cookie; import jakarta.servlet.http.HttpServletRequest; @@ -21,16 +22,24 @@ import java.util.Map; @Slf4j public class JwtInterceptor implements HandlerInterceptor { + private UserInfoDTO forgeryUser; public JwtInterceptor() { } - + public void setForgeryUser(UserInfoDTO forgeryUser) { + this.forgeryUser = forgeryUser; + } @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { //请求消息头获取用户ID String token = findTokenInRequest(request); if (StrUtil.isBlank(token)) { + if (forgeryUser != null){ + JWT jwt = JWTUtil.parseToken(TokenUtil.creatToken(JSONUtil.toJsonStr(forgeryUser))); + cacheAuth(jwt); + return true; + } // 如果是swagger来的接口,说明这里是测试的,会伪造一个用户 String referer = request.getHeader("Referer"); if (StrUtil.isNotBlank(referer) && StrUtil.contains(referer, "swagger-ui")) { diff --git a/src/main/java/com/supervision/config/WebConfig.java b/src/main/java/com/supervision/config/WebConfig.java index 58a9cf3..2cd28ba 100644 --- a/src/main/java/com/supervision/config/WebConfig.java +++ b/src/main/java/com/supervision/config/WebConfig.java @@ -1,6 +1,10 @@ package com.supervision.config; +import cn.hutool.core.util.StrUtil; +import com.supervision.police.dto.user.UserInfoDTO; +import com.supervision.police.service.SystemUserService; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.Environment; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; @@ -8,16 +12,31 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import java.util.ArrayList; import java.util.List; +@Slf4j @Configuration @RequiredArgsConstructor public class WebConfig implements WebMvcConfigurer { private final Environment environment; + private final SystemUserService systemUserService; + @Override public void addInterceptors(InterceptorRegistry registry) { // 添加权限拦截器 - registry.addInterceptor(new JwtInterceptor()) + JwtInterceptor interceptor = new JwtInterceptor(); + // ***切记**** 此属性仅可以通过idea设置环境变量,千万不要写入配置文件中..... + String userAccount = environment.getProperty("fu-hsi-config.local.user.forgery"); + if (StrUtil.isNotEmpty(userAccount)){ + log.info("已配置本地模拟用户:{}",userAccount); + UserInfoDTO userInfo = systemUserService.getUserInfo(userAccount); + if (null == userInfo){ + log.warn("本地模拟用户不存在:{}",userAccount); + }else { + interceptor.setForgeryUser(userInfo); + } + } + registry.addInterceptor(interceptor) .addPathPatterns("/**") .excludePathPatterns(ignorePathPatterns()); } diff --git a/src/main/java/com/supervision/police/service/SystemUserService.java b/src/main/java/com/supervision/police/service/SystemUserService.java index 51da40d..2e6626c 100644 --- a/src/main/java/com/supervision/police/service/SystemUserService.java +++ b/src/main/java/com/supervision/police/service/SystemUserService.java @@ -16,6 +16,9 @@ public interface SystemUserService extends IService { UserInfoDTO getCurrentUser(); + + UserInfoDTO getUserInfo(String account); + String saveUserInfo(UserInfoReqVo userInfoReqVo); void updateUserInfo(UserInfoReqVo userInfoReqVo); diff --git a/src/main/java/com/supervision/police/service/impl/SystemUserServiceImpl.java b/src/main/java/com/supervision/police/service/impl/SystemUserServiceImpl.java index cc9c384..5170d6f 100644 --- a/src/main/java/com/supervision/police/service/impl/SystemUserServiceImpl.java +++ b/src/main/java/com/supervision/police/service/impl/SystemUserServiceImpl.java @@ -78,6 +78,28 @@ public class SystemUserServiceImpl extends ServiceImpl().eq(SystemUser::getAccount, account)); + + if (null == systemUser){ + return null; + } + // 组装用户信息 + UserInfoDTO userInfoDTO = new UserInfoDTO(systemUser); + + userInfoDTO.setUserRoleList(userRoleRelationManageService.listUserRoleByUserIdList(CollUtil.newArrayList(systemUser.getId()))); + // 设置用户权限信息 + List roleMenuDTOS = userRoleRelationManageService.listUserRoleMenu(systemUser.getId()); + if (CollUtil.isNotEmpty(roleMenuDTOS)){ + List menuDTOS = menuService.treeMenuList(); + List menuBySelect = menuService.filterMenuBySelect(menuDTOS,roleMenuDTOS.stream().map(RoleMenuDTO::getMenuId).toList()); + userInfoDTO.setPermission(menuBySelect.stream().map(MenuDTO::getLabelCode).toList()); + } + return userInfoDTO; + } + @Override @Transactional(transactionManager = "dataSourceTransactionManager",rollbackFor = Exception.class) public String saveUserInfo(UserInfoReqVo userInfoReqVo) {