1. 添加开发环境设置默认登录用户功能

jinan_dev
xueqingkun 5 months ago
parent 1ac95b7e9a
commit f8340cfcf3

@ -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")) {

@ -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());
}

@ -16,6 +16,9 @@ public interface SystemUserService extends IService<SystemUser> {
UserInfoDTO getCurrentUser();
UserInfoDTO getUserInfo(String account);
String saveUserInfo(UserInfoReqVo userInfoReqVo);
void updateUserInfo(UserInfoReqVo userInfoReqVo);

@ -78,6 +78,28 @@ public class SystemUserServiceImpl extends ServiceImpl<SystemUserMapper, SystemU
return UserUtil.getUser();
}
@Override
public UserInfoDTO getUserInfo(String account) {
Assert.notEmpty(account, "用户账号不能为空");
SystemUser systemUser = super.getOne(new LambdaQueryWrapper<SystemUser>().eq(SystemUser::getAccount, account));
if (null == systemUser){
return null;
}
// 组装用户信息
UserInfoDTO userInfoDTO = new UserInfoDTO(systemUser);
userInfoDTO.setUserRoleList(userRoleRelationManageService.listUserRoleByUserIdList(CollUtil.newArrayList(systemUser.getId())));
// 设置用户权限信息
List<RoleMenuDTO> roleMenuDTOS = userRoleRelationManageService.listUserRoleMenu(systemUser.getId());
if (CollUtil.isNotEmpty(roleMenuDTOS)){
List<MenuDTO> menuDTOS = menuService.treeMenuList();
List<MenuDTO> 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) {

Loading…
Cancel
Save