update 优化 查询登录用户数据 统一走缓存

This commit is contained in:
疯狂的狮子li 2022-01-26 20:58:05 +08:00
parent 69bcebdf86
commit 0da30f4623
9 changed files with 35 additions and 51 deletions

View File

@ -7,11 +7,10 @@ import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysMenu; import com.ruoyi.common.core.domain.entity.SysMenu;
import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.domain.model.LoginBody; import com.ruoyi.common.core.domain.model.LoginBody;
import com.ruoyi.common.core.service.UserService;
import com.ruoyi.common.helper.LoginHelper; import com.ruoyi.common.helper.LoginHelper;
import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.system.domain.vo.RouterVo; import com.ruoyi.system.domain.vo.RouterVo;
import com.ruoyi.system.service.ISysMenuService; import com.ruoyi.system.service.ISysMenuService;
import com.ruoyi.system.service.ISysUserService;
import com.ruoyi.system.service.SysLoginService; import com.ruoyi.system.service.SysLoginService;
import com.ruoyi.system.service.SysPermissionService; import com.ruoyi.system.service.SysPermissionService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
@ -41,6 +40,7 @@ public class SysLoginController {
private final SysLoginService loginService; private final SysLoginService loginService;
private final ISysMenuService menuService; private final ISysMenuService menuService;
private final ISysUserService userService;
private final SysPermissionService permissionService; private final SysPermissionService permissionService;
/** /**
@ -78,7 +78,7 @@ public class SysLoginController {
@ApiOperation("获取用户信息") @ApiOperation("获取用户信息")
@GetMapping("getInfo") @GetMapping("getInfo")
public AjaxResult<Map<String, Object>> getInfo() { public AjaxResult<Map<String, Object>> getInfo() {
SysUser user = SpringUtils.getBean(UserService.class).selectUserById(LoginHelper.getUserId()); SysUser user = userService.selectUserById(LoginHelper.getUserId());
// 角色集合 // 角色集合
Set<String> roles = permissionService.getRolePermission(user); Set<String> roles = permissionService.getRolePermission(user);
// 权限集合 // 权限集合

View File

@ -5,12 +5,10 @@ import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.service.UserService;
import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.helper.LoginHelper; import com.ruoyi.common.helper.LoginHelper;
import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.system.domain.SysOss; import com.ruoyi.system.domain.SysOss;
import com.ruoyi.system.service.ISysOssService; import com.ruoyi.system.service.ISysOssService;
import com.ruoyi.system.service.ISysUserService; import com.ruoyi.system.service.ISysUserService;
@ -91,7 +89,7 @@ public class SysProfileController extends BaseController {
@Log(title = "个人信息", businessType = BusinessType.UPDATE) @Log(title = "个人信息", businessType = BusinessType.UPDATE)
@PutMapping("/updatePwd") @PutMapping("/updatePwd")
public AjaxResult<Void> updatePwd(String oldPassword, String newPassword) { public AjaxResult<Void> updatePwd(String oldPassword, String newPassword) {
SysUser user = SpringUtils.getBean(UserService.class).selectUserById(LoginHelper.getUserId()); SysUser user = userService.selectUserById(LoginHelper.getUserId());
String userName = user.getUserName(); String userName = user.getUserName();
String password = user.getPassword(); String password = user.getPassword();
if (!SecurityUtils.matchesPassword(oldPassword, password)) { if (!SecurityUtils.matchesPassword(oldPassword, password)) {

View File

@ -1,10 +1,13 @@
package com.ruoyi.common.core.domain.model; package com.ruoyi.common.core.domain.model;
import com.ruoyi.common.core.domain.entity.SysDept;
import com.ruoyi.common.core.domain.entity.SysRole;
import com.ruoyi.common.helper.LoginHelper; import com.ruoyi.common.helper.LoginHelper;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import java.io.Serializable; import java.io.Serializable;
import java.util.List;
import java.util.Set; import java.util.Set;
/** /**
@ -84,6 +87,21 @@ public class LoginUser implements Serializable {
*/ */
private String username; private String username;
/**
* 部门对象
*/
private SysDept dept;
/**
* 角色对象
*/
private List<SysRole> roles;
/**
* 数据权限 当前角色ID
*/
private Long roleId;
/** /**
* 获取登录id * 获取登录id
*/ */

View File

@ -1,28 +0,0 @@
package com.ruoyi.common.core.service;
import com.ruoyi.common.core.domain.entity.SysUser;
/**
* 通用 用户业务
*
* @author Lion Li
*/
public interface UserService {
/**
* 通过用户名查询用户
*
* @param userName 用户名
* @return 用户对象信息
*/
SysUser selectUserByUserName(String userName);
/**
* 通过用户ID查询用户
*
* @param userId 用户ID
* @return 用户对象信息
*/
SysUser selectUserById(Long userId);
}

View File

@ -8,12 +8,12 @@ import cn.hutool.core.util.ObjectUtil;
import com.ruoyi.common.annotation.DataColumn; import com.ruoyi.common.annotation.DataColumn;
import com.ruoyi.common.annotation.DataPermission; import com.ruoyi.common.annotation.DataPermission;
import com.ruoyi.common.core.domain.entity.SysRole; import com.ruoyi.common.core.domain.entity.SysRole;
import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.core.service.UserService;
import com.ruoyi.common.enums.DataScopeType; import com.ruoyi.common.enums.DataScopeType;
import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.helper.DataPermissionHelper; import com.ruoyi.common.helper.DataPermissionHelper;
import com.ruoyi.common.helper.LoginHelper; import com.ruoyi.common.helper.LoginHelper;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.common.utils.spring.SpringUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -74,13 +74,13 @@ public class PlusDataPermissionHandler {
inavlidCacheSet.add(mappedStatementId); inavlidCacheSet.add(mappedStatementId);
return where; return where;
} }
SysUser currentUser = DataPermissionHelper.getVariable("user"); LoginUser currentUser = DataPermissionHelper.getVariable("user");
if (ObjectUtil.isNull(currentUser)) { if (ObjectUtil.isNull(currentUser)) {
currentUser = SpringUtils.getBean(UserService.class).selectUserById(LoginHelper.getUserId()); currentUser = LoginHelper.getLoginUser();
DataPermissionHelper.setVariable("user", currentUser); DataPermissionHelper.setVariable("user", currentUser);
} }
// 如果是超级管理员则不过滤数据 // 如果是超级管理员则不过滤数据
if (ObjectUtil.isNull(currentUser) || currentUser.isAdmin()) { if (ObjectUtil.isNull(currentUser) || SecurityUtils.isAdmin(currentUser.getUserId())) {
return where; return where;
} }
String dataFilterSql = buildDataFilter(dataColumns, isSelect); String dataFilterSql = buildDataFilter(dataColumns, isSelect);
@ -108,7 +108,7 @@ public class PlusDataPermissionHandler {
StringBuilder sqlString = new StringBuilder(); StringBuilder sqlString = new StringBuilder();
// 更新或删除需满足所有条件 // 更新或删除需满足所有条件
String joinStr = isSelect ? " OR " : " AND "; String joinStr = isSelect ? " OR " : " AND ";
SysUser user = DataPermissionHelper.getVariable("user"); LoginUser user = DataPermissionHelper.getVariable("user");
StandardEvaluationContext context = new StandardEvaluationContext(); StandardEvaluationContext context = new StandardEvaluationContext();
context.setBeanResolver(beanResolver); context.setBeanResolver(beanResolver);
DataPermissionHelper.getContext().forEach(context::setVariable); DataPermissionHelper.getContext().forEach(context::setVariable);

View File

@ -9,14 +9,12 @@ import cn.hutool.http.useragent.UserAgent;
import cn.hutool.http.useragent.UserAgentUtil; import cn.hutool.http.useragent.UserAgentUtil;
import com.ruoyi.common.constant.Constants; import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.core.domain.dto.UserOnlineDTO; import com.ruoyi.common.core.domain.dto.UserOnlineDTO;
import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.core.service.UserService;
import com.ruoyi.common.enums.UserType; import com.ruoyi.common.enums.UserType;
import com.ruoyi.common.helper.LoginHelper; import com.ruoyi.common.helper.LoginHelper;
import com.ruoyi.common.utils.ServletUtils; import com.ruoyi.common.utils.ServletUtils;
import com.ruoyi.common.utils.ip.AddressUtils; import com.ruoyi.common.utils.ip.AddressUtils;
import com.ruoyi.common.utils.redis.RedisUtils; import com.ruoyi.common.utils.redis.RedisUtils;
import com.ruoyi.common.utils.spring.SpringUtils;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -44,7 +42,7 @@ public class UserActionListener implements SaTokenListener {
if (userType == UserType.SYS_USER) { if (userType == UserType.SYS_USER) {
UserAgent userAgent = UserAgentUtil.parse(ServletUtils.getRequest().getHeader("User-Agent")); UserAgent userAgent = UserAgentUtil.parse(ServletUtils.getRequest().getHeader("User-Agent"));
String ip = ServletUtils.getClientIP(); String ip = ServletUtils.getClientIP();
SysUser user = SpringUtils.getBean(UserService.class).selectUserById(LoginHelper.getUserId()); LoginUser user = LoginHelper.getLoginUser();
String tokenValue = StpUtil.getTokenValue(); String tokenValue = StpUtil.getTokenValue();
UserOnlineDTO dto = UserOnlineDTO.builder() UserOnlineDTO dto = UserOnlineDTO.builder()
.ipaddr(ip) .ipaddr(ip)
@ -53,7 +51,7 @@ public class UserActionListener implements SaTokenListener {
.os(userAgent.getOs().getName()) .os(userAgent.getOs().getName())
.loginTime(System.currentTimeMillis()) .loginTime(System.currentTimeMillis())
.tokenId(tokenValue) .tokenId(tokenValue)
.userName(user.getUserName()) .userName(user.getUsername())
.build(); .build();
if (ObjectUtil.isNotNull(user.getDept())) { if (ObjectUtil.isNotNull(user.getDept())) {
dto.setDeptName(user.getDept().getDeptName()); dto.setDeptName(user.getDept().getDeptName());

View File

@ -3,7 +3,6 @@ package com.ruoyi.system.service;
import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.core.service.UserService;
import java.util.List; import java.util.List;
@ -12,7 +11,7 @@ import java.util.List;
* *
* @author Lion Li * @author Lion Li
*/ */
public interface ISysUserService extends UserService { public interface ISysUserService {
TableDataInfo<SysUser> selectPageUserList(SysUser user, PageQuery pageQuery); TableDataInfo<SysUser> selectPageUserList(SysUser user, PageQuery pageQuery);
@ -47,7 +46,6 @@ public interface ISysUserService extends UserService {
* @param userName 用户名 * @param userName 用户名
* @return 用户对象信息 * @return 用户对象信息
*/ */
@Override
SysUser selectUserByUserName(String userName); SysUser selectUserByUserName(String userName);
/** /**
@ -56,7 +54,6 @@ public interface ISysUserService extends UserService {
* @param userId 用户ID * @param userId 用户ID
* @return 用户对象信息 * @return 用户对象信息
*/ */
@Override
SysUser selectUserById(Long userId); SysUser selectUserById(Long userId);
/** /**

View File

@ -137,6 +137,8 @@ public class SysLoginService {
loginUser.setUserType(user.getUserType()); loginUser.setUserType(user.getUserType());
loginUser.setMenuPermission(permissionService.getMenuPermission(user)); loginUser.setMenuPermission(permissionService.getMenuPermission(user));
loginUser.setRolePermission(permissionService.getRolePermission(user)); loginUser.setRolePermission(permissionService.getRolePermission(user));
loginUser.setRoles(user.getRoles());
loginUser.setDept(user.getDept());
return loginUser; return loginUser;
} }

View File

@ -10,7 +10,6 @@ import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.core.domain.entity.SysRole; import com.ruoyi.common.core.domain.entity.SysRole;
import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.core.service.UserService;
import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.helper.LoginHelper; import com.ruoyi.common.helper.LoginHelper;
import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.StringUtils;
@ -38,7 +37,7 @@ import java.util.stream.Collectors;
@Slf4j @Slf4j
@RequiredArgsConstructor @RequiredArgsConstructor
@Service @Service
public class SysUserServiceImpl implements ISysUserService, UserService { public class SysUserServiceImpl implements ISysUserService {
private final SysUserMapper baseMapper; private final SysUserMapper baseMapper;
private final SysRoleMapper roleMapper; private final SysRoleMapper roleMapper;