优化: 改用注解方式验证是否登录和权限 【废弃配置文件方式】

This commit is contained in:
TinyAnts 2023-03-13 15:36:04 +08:00
parent 9cc41d2e80
commit 1c480b9630
40 changed files with 321 additions and 290 deletions

View File

@ -33,4 +33,5 @@
<tree path="/like-front/src/main/java/com/mdd/front/LikeFrontThreadLocal.java" title="线程" extension="java"/>
<tree path="/like-admin/src/main/java/com/mdd/admin/crontab" title="任务层"/>
<tree path="/like-common/src/main/java/com/mdd/common/util" title="公共工具"/>
<tree path="/like-common/src/main/java/com/mdd/common/aop" title="公共切面"/>
</trees>

View File

@ -2,13 +2,15 @@ package com.mdd.admin;
import cn.dev33.satoken.stp.StpUtil;
import com.alibaba.fastjson2.JSON;
import com.mdd.admin.config.AdminConfig;
import com.mdd.admin.service.ISystemAuthAdminService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.mdd.common.aop.NotPower;
import com.mdd.common.aop.NotLogin;
import com.mdd.common.core.AjaxResult;
import com.mdd.common.entity.system.SystemAuthAdmin;
import com.mdd.common.enums.HttpEnum;
import com.mdd.common.util.RedisUtils;
import com.mdd.common.exception.LoginException;
import com.mdd.common.mapper.system.SystemAuthAdminMapper;
import com.mdd.common.util.StringUtils;
import com.mdd.common.util.ToolsUtils;
import com.mdd.common.util.YmlUtils;
import org.jetbrains.annotations.NotNull;
import org.springframework.stereotype.Component;
@ -18,9 +20,9 @@ import org.springframework.web.servlet.HandlerInterceptor;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
/**
* 拦截器
@ -29,33 +31,45 @@ import java.util.Map;
public class LikeAdminInterceptor implements HandlerInterceptor {
@Resource
ISystemAuthAdminService iSystemAuthAdminService;
SystemAuthAdminMapper systemAuthAdminMapper;
/**
* 前置处理器
*
* @param request 请求
* @param response 响应
* @param handler 处理
* @return boolean
* @throws Exception 异常
*/
@Override
public boolean preHandle(@NotNull HttpServletRequest request,
@NotNull HttpServletResponse response,
@NotNull Object handler) throws Exception {
// 请求的类型
// 请求方法类型
response.setContentType("application/json;charset=utf-8");
if (!(handler instanceof HandlerMethod)) {
return HandlerInterceptor.super.preHandle(request, response, handler);
}
// 路由转权限
String prefix = "/api/";
String route = request.getRequestURI().replaceFirst(prefix, "");
String auths = route.replace("/", ":");
// 免登录接口
List<String> notLoginUri = Arrays.asList(AdminConfig.notLoginUri);
if (notLoginUri.contains(auths)) {
return HandlerInterceptor.super.preHandle(request, response, handler);
// 登录权限校验
try {
Method method = this.obtainAop(handler);
String reqUri = request.getRequestURI();
this.checkLogin(method, reqUri);
} catch (LoginException e) {
AjaxResult<Object> result = AjaxResult.failed(e.getCode(), e.getMsg());
response.getWriter().print(JSON.toJSONString(result));
return false;
}
// 演示环境拦截
String env = YmlUtils.get("like.production");
if (StringUtils.isNotNull(env) && env.equals("true")) {
String prefix = "/api/";
String route = request.getRequestURI().replaceFirst(prefix, "");
String auths = route.replace("/", ":");
List<String> ignoreUrl = Arrays.asList("system:login", "system:logout");
if (request.getMethod().equals("POST") && !ignoreUrl.contains(auths)) {
String message = "演示环境不支持修改数据,请下载源码本地部署体验";
@ -65,64 +79,19 @@ public class LikeAdminInterceptor implements HandlerInterceptor {
}
}
// Token是否为空
String token = StpUtil.getTokenValue();
if (StringUtils.isBlank(token)) {
AjaxResult<Object> result = AjaxResult.failed(HttpEnum.TOKEN_EMPTY.getCode(), HttpEnum.TOKEN_EMPTY.getMsg());
response.getWriter().print(JSON.toJSONString(result));
return false;
}
// Token是否过期
Object id = StpUtil.getLoginId();
if (StringUtils.isNull(id)) {
AjaxResult<Object> result = AjaxResult.failed(HttpEnum.TOKEN_INVALID.getCode(), HttpEnum.TOKEN_INVALID.getMsg());
response.getWriter().print(JSON.toJSONString(result));
return false;
}
// Users是否存在
if (!RedisUtils.hExists(AdminConfig.backstageManageKey, id)) {
iSystemAuthAdminService.cacheAdminUserByUid(Integer.parseInt(id.toString()));
}
// 获取用户的信息
String UserStr = RedisUtils.hGet(AdminConfig.backstageManageKey, String.valueOf(id)).toString();
Map<String, String> userMap = ToolsUtils.jsonToMap(UserStr);
// 校验用户被删除
if (userMap.get("isDelete").equals("1")) {
AjaxResult<Object> result = AjaxResult.failed(HttpEnum.TOKEN_INVALID.getCode(), HttpEnum.TOKEN_INVALID.getMsg());
response.getWriter().print(JSON.toJSONString(result));
return false;
}
// 校验用户被禁用
if (userMap.get("isDisable").equals("1")) {
AjaxResult<Object> result = AjaxResult.failed(HttpEnum.LOGIN_DISABLE_ERROR.getCode(), HttpEnum.LOGIN_DISABLE_ERROR.getMsg());
response.getWriter().print(JSON.toJSONString(result));
return false;
}
// 用户写本地线里
LikeAdminThreadLocal.put("adminId", id);
LikeAdminThreadLocal.put("roleIds", userMap.get("roleIds"));
LikeAdminThreadLocal.put("username", userMap.get("username"));
LikeAdminThreadLocal.put("nickname", userMap.get("nickname"));
// 免校验权限接口
List<String> notAuthUri = Arrays.asList(AdminConfig.notAuthUri);
if (notAuthUri.contains(auths) || Integer.parseInt(id.toString()) == 1) {
return HandlerInterceptor.super.preHandle(request, response, handler);
}
// 校验用户的权限
StpUtil.checkPermission(auths);
// 验证通过继续操作
// 验证通过继续
return HandlerInterceptor.super.preHandle(request, response, handler);
}
/**
* 后置处理器
*
* @param request 请求
* @param response 响应
* @param handler 处理
* @param ex 异常
* @throws Exception 异常
*/
@Override
public void afterCompletion(@NotNull HttpServletRequest request,
@NotNull HttpServletResponse response,
@ -130,4 +99,114 @@ public class LikeAdminInterceptor implements HandlerInterceptor {
LikeAdminThreadLocal.remove();
HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
}
/**
* 提取注解
*
* @param handler 处理器
* @return Method
* @throws Exception 异常
*/
private Method obtainAop(@NotNull Object handler) throws Exception {
String[] objArr = handler.toString().split("#");
String methodStr = objArr[1].split("\\(")[0];
String classStr = objArr[0];
Class<?> clazz = Class.forName(classStr);
Method[] methods = clazz.getDeclaredMethods();
for (Method method : methods) {
if (method.getName().equals(methodStr)) {
return method;
}
}
return null;
}
/**
* 登录验证
*
* @param method 方法类
* @author fzr
*/
private void checkLogin(Method method, String reqUri) {
for (int i=0; i<=0; i++) {
// 免登校验
if (StringUtils.isNotNull(method) && method.isAnnotationPresent(NotLogin.class)) {
break;
}
// 令牌校验
String token = StpUtil.getTokenValue();
if (StringUtils.isNull(token) || StringUtils.isBlank(token)) {
Integer errCode = HttpEnum.TOKEN_EMPTY.getCode();
String errMsg = HttpEnum.TOKEN_EMPTY.getMsg();
throw new LoginException(errCode, errMsg);
}
// 登录校验
Object id = StpUtil.getLoginId();
if (StringUtils.isNull(id)) {
Integer errCode = HttpEnum.TOKEN_INVALID.getCode();
String errMsg = HttpEnum.TOKEN_INVALID.getMsg();
throw new LoginException(errCode, errMsg);
}
// 用户校验
SystemAuthAdmin adminUser = systemAuthAdminMapper.selectOne(
new QueryWrapper<SystemAuthAdmin>()
.select("id,username,role_ids,dept_ids,post_ids,is_disable")
.eq("id", Integer.parseInt(id.toString()))
.eq("is_delete", 0)
.last("limit 1"));
// 删除校验
if (StringUtils.isNull(adminUser)) {
Integer errCode = HttpEnum.TOKEN_INVALID.getCode();
String errMsg = HttpEnum.TOKEN_INVALID.getMsg();
throw new LoginException(errCode, errMsg);
}
// 禁用校验
if (adminUser.getIsDisable().equals(1)) {
Integer errCode = HttpEnum.LOGIN_DISABLE_ERROR.getCode();
String errMsg = HttpEnum.LOGIN_DISABLE_ERROR.getMsg();
throw new LoginException(errCode, errMsg);
}
// 写入线程
LikeAdminThreadLocal.put("adminId", id);
LikeAdminThreadLocal.put("username", adminUser.getUsername());
LikeAdminThreadLocal.put("roleIds", adminUser.getRoleIds());
LikeAdminThreadLocal.put("deptIds", adminUser.getDeptIds());
LikeAdminThreadLocal.put("postIds", adminUser.getPostIds());
// 权限校验
this.checkAuth(method, reqUri);
}
}
/**
* 权限验证
*
* @param method 方法类
* @param uri 请求路由
* @author fzr
*/
private void checkAuth(Method method, String uri) {
for (int i=0; i<=0; i++) {
// 免权限校验
if (StringUtils.isNotNull(method) && method.isAnnotationPresent(NotPower.class)) {
break;
}
// 路由转权限
String prefix = "/api/";
String route = uri.replaceFirst(prefix, "");
String auths = route.replace("/", ":");
// 校验权限
StpUtil.checkPermission(auths);
}
}
}

View File

@ -55,7 +55,7 @@ public class LikeAdminThreadLocal {
/**
* 获取角色ID
*/
public static List<Integer> getRoleId() {
public static List<Integer> getRoleIds() {
String roleIds = LikeAdminThreadLocal.get("roleIds").toString();
if (roleIds.equals("") || roleIds.equals("0")) {
return Collections.emptyList();

View File

@ -1,20 +1,27 @@
package com.mdd.admin.config.aop;
package com.mdd.admin.aop;
import com.mdd.admin.aop.aspect.RequestType;
import java.lang.annotation.*;
/**
* 日志记录类
*/
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Log {
/**
* 模块
* 模块名称
*
* @return String
*/
String title() default "";
/**
* 模块
* 请求类型
*
* @return String
*/
RequestType requestType() default RequestType.Default;

View File

@ -1,7 +1,8 @@
package com.mdd.admin.config.aop;
package com.mdd.admin.aop.aspect;
import com.alibaba.fastjson2.JSON;
import com.mdd.admin.LikeAdminThreadLocal;
import com.mdd.admin.aop.Log;
import com.mdd.common.entity.system.SystemLogOperate;
import com.mdd.common.mapper.system.SystemLogOperateMapper;
import com.mdd.common.util.IpUtils;
@ -43,7 +44,7 @@ public class LogAspect {
/**
* 声明切面点拦截那些类
*/
@Pointcut("@annotation(com.mdd.admin.config.aop.Log)")
@Pointcut("@annotation(com.mdd.admin.aop.Log)")
private void pointCutMethodController() {}
/**

View File

@ -1,4 +1,4 @@
package com.mdd.admin.config.aop;
package com.mdd.admin.aop.aspect;
/**
* 请求参数类
@ -12,6 +12,5 @@ public enum RequestType {
* 默认数据类型
*/
Default
;
}

View File

@ -1,38 +0,0 @@
package com.mdd.admin.config;
/**
* 后台公共配置
*/
public class AdminConfig {
// 管理缓存键
public static final String backstageManageKey = "backstage:manage";
// 角色缓存键
public static final String backstageRolesKey = "backstage:roles";
// 免登录验证
public static String[] notLoginUri = new String[]{
"system:captcha", // 验证码
"system:login", // 登录接口
"index:config" // 配置接口
};
// 免权限验证
public static String[] notAuthUri = new String[]{
"system:logout", // 退出登录
"system:menu:menus", // 系统菜单
"system:menu:route", // 菜单路由
"system:admin:upInfo", // 管理员更新
"system:admin:self", // 管理员信息
"system:role:all", // 所有角色
"system:post:all", // 所有岗位
"system:dept:list", // 所有部门
"system:menu:list", // 菜单列表
"setting:dict:type:all", // 所有字典类型
"setting:dict:data:all", // 所有字典数据
"article:cate:all", // 所有文章分类
"decorate:data:article", // 装修数据文章
};
}

View File

@ -1,61 +0,0 @@
package com.mdd.admin.config;
import cn.dev33.satoken.stp.StpInterface;
import com.mdd.admin.LikeAdminThreadLocal;
import com.mdd.admin.service.ISystemAuthPermService;
import com.mdd.common.util.ArrayUtils;
import com.mdd.common.util.RedisUtils;
import com.mdd.common.util.StringUtils;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.*;
/**
* Sa-Token自定义权限验证接口
*/
@Component
public class StpInterConfig implements StpInterface {
@Resource
ISystemAuthPermService iSystemAuthPermService;
/**
* 返回一个账号所拥有的权限码集合
*
* @param loginId 登录ID
* @param loginType 登录类型
* @return List<String>
*/
@Override
public List<String> getPermissionList(Object loginId, String loginType) {
List<Integer> roleIds = LikeAdminThreadLocal.getRoleId();
List<String> perms = new LinkedList<>();
for (Integer roleId : roleIds) {
Object menusObj = RedisUtils.hGet(AdminConfig.backstageRolesKey, String.valueOf(roleId));
if (StringUtils.isNull(menusObj)) {
iSystemAuthPermService.cacheRoleMenusByRoleId(roleId);
menusObj = RedisUtils.hGet(AdminConfig.backstageRolesKey, String.valueOf(roleId));
}
if (StringUtils.isNotNull(menusObj)) {
perms.addAll(ArrayUtils.stringToListAsStr(menusObj.toString(), ","));
}
}
return perms;
}
/**
* 返回一个账号所拥有的角色标识集合
*
* @param loginId 登录ID
* @param loginType 登录类型
* @return List<String>
*/
@Override
public List<String> getRoleList(Object loginId, String loginType) {
return null;
}
}

View File

@ -1,4 +1,4 @@
package com.mdd.admin.config;
package com.mdd.admin.config.stp;
import cn.dev33.satoken.exception.NotLoginException;
import cn.dev33.satoken.exception.NotPermissionException;

View File

@ -0,0 +1,87 @@
package com.mdd.admin.config.stp;
import cn.dev33.satoken.stp.StpInterface;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.mdd.admin.LikeAdminThreadLocal;
import com.mdd.common.entity.system.SystemAuthMenu;
import com.mdd.common.entity.system.SystemAuthPerm;
import com.mdd.common.mapper.system.SystemAuthMenuMapper;
import com.mdd.common.mapper.system.SystemAuthPermMapper;
import com.mdd.common.util.StringUtils;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.*;
/**
* Sa-Token自定义权限验证接口
*/
@Component
public class StpInterConfig implements StpInterface {
@Resource
SystemAuthPermMapper systemAuthPermMapper;
@Resource
SystemAuthMenuMapper systemAuthMenuMapper;
/**
* 返回一个账号所拥有的权限码集合
*
* @param loginId 登录ID
* @param loginType 登录类型
* @return List<String>
*/
@Override
public List<String> getPermissionList(Object loginId, String loginType) {
List<Integer> roleIds = LikeAdminThreadLocal.getRoleIds();
List<String> perms = new LinkedList<>();
if (roleIds.isEmpty()) {
return perms;
}
List<SystemAuthPerm> permList = systemAuthPermMapper.selectList(
new QueryWrapper<SystemAuthPerm>()
.select("id,role_id,menu_id")
.in("role_id", roleIds));
if (permList.isEmpty()) {
return perms;
}
List<Integer> menuIds = new LinkedList<>();
for (SystemAuthPerm systemAuthPerm : permList) {
menuIds.add(systemAuthPerm.getMenuId());
}
List<SystemAuthMenu> systemAuthMenus = systemAuthMenuMapper.selectList(
new QueryWrapper<SystemAuthMenu>()
.select("id,perms")
.eq("is_disable", 0)
.in("id", menuIds)
.in("menu_type", Arrays.asList("C", "A"))
.orderByAsc(Arrays.asList("menu_sort", "id")));
for (SystemAuthMenu item : systemAuthMenus) {
if (StringUtils.isNotNull(item.getPerms()) && StringUtils.isNotEmpty(item.getPerms())) {
perms.add(item.getPerms().trim());
}
}
return perms;
}
/**
* 返回一个账号所拥有的角色标识集合
*
* @param loginId 登录ID
* @param loginType 登录类型
* @return List<String>
*/
@Override
public List<String> getRoleList(Object loginId, String loginType) {
return null;
}
}

View File

@ -1,7 +1,7 @@
package com.mdd.admin.controller;
import com.alibaba.fastjson2.JSONArray;
import com.mdd.admin.config.aop.Log;
import com.mdd.admin.aop.Log;
import com.mdd.admin.service.IAlbumsService;
import com.mdd.admin.validate.AlbumCateValidate;
import com.mdd.admin.validate.AlbumMoveValidate;

View File

@ -1,6 +1,7 @@
package com.mdd.admin.controller;
import com.mdd.admin.config.aop.Log;
import com.mdd.admin.aop.Log;
import com.mdd.common.aop.NotPower;
import com.mdd.admin.service.IArtCateService;
import com.mdd.admin.validate.ArtCateCreateValidate;
import com.mdd.admin.validate.ArtCateUpdateValidate;
@ -33,6 +34,7 @@ public class ArtCateController {
* @author fzr
* @return AjaxResult<List<ArticleCateVo>>
*/
@NotPower
@GetMapping("/all")
public AjaxResult<List<ArticleCateVo>> all() {
List<ArticleCateVo> list = iArtCateService.all();

View File

@ -1,6 +1,6 @@
package com.mdd.admin.controller;
import com.mdd.admin.config.aop.Log;
import com.mdd.admin.aop.Log;
import com.mdd.admin.service.IArticleService;
import com.mdd.admin.validate.ArticleCreateValidate;
import com.mdd.admin.validate.ArticleSearchValidate;

View File

@ -1,5 +1,6 @@
package com.mdd.admin.controller;
import com.mdd.common.aop.NotLogin;
import com.mdd.admin.service.IIndexService;
import com.mdd.common.core.AjaxResult;
import lombok.extern.slf4j.Slf4j;
@ -39,6 +40,7 @@ public class IndexController {
* @author fzr
* @return AjaxResult<Map<String, Object>
*/
@NotLogin
@GetMapping("/config")
public AjaxResult<Map<String, Object>> config() {
Map<String, Object> map = iIndexService.config();

View File

@ -1,8 +1,8 @@
package com.mdd.admin.controller;
import com.mdd.admin.LikeAdminThreadLocal;
import com.mdd.admin.config.aop.Log;
import com.mdd.admin.config.aop.RequestType;
import com.mdd.admin.aop.Log;
import com.mdd.admin.aop.aspect.RequestType;
import com.mdd.admin.service.IAlbumsService;
import com.mdd.common.core.AjaxResult;
import com.mdd.common.enums.AlbumEnum;

View File

@ -1,6 +1,6 @@
package com.mdd.admin.controller.channel;
import com.mdd.admin.config.aop.Log;
import com.mdd.admin.aop.Log;
import com.mdd.admin.service.IChannelH5ConfigService;
import com.mdd.admin.validate.channel.ChannelH5Validate;
import com.mdd.admin.vo.channel.ChannelH5Vo;

View File

@ -1,6 +1,6 @@
package com.mdd.admin.controller.channel;
import com.mdd.admin.config.aop.Log;
import com.mdd.admin.aop.Log;
import com.mdd.admin.service.IChannelMpConfigService;
import com.mdd.admin.validate.channel.ChannelMpValidate;
import com.mdd.admin.vo.channel.ChannelMpVo;

View File

@ -1,6 +1,6 @@
package com.mdd.admin.controller.channel;
import com.mdd.admin.config.aop.Log;
import com.mdd.admin.aop.Log;
import com.mdd.admin.service.IChannelOaConfigService;
import com.mdd.admin.validate.channel.ChannelOaValidate;
import com.mdd.admin.vo.channel.ChannelOaVo;

View File

@ -1,5 +1,6 @@
package com.mdd.admin.controller.decorate;
import com.mdd.common.aop.NotPower;
import com.mdd.admin.service.IDecorateDataService;
import com.mdd.admin.vo.decorate.DecorateDataArticleVo;
import com.mdd.common.core.AjaxResult;
@ -28,6 +29,7 @@ public class DecorateDataController {
* @param limit 条数
* @return AjaxResult<List<DecorateDataArticleVo>>
*/
@NotPower
@GetMapping("/article")
public AjaxResult<List<DecorateDataArticleVo>> article(@RequestParam(defaultValue = "10") Integer limit) {
List<DecorateDataArticleVo> list = iDecorateDataService.article(limit);

View File

@ -1,6 +1,6 @@
package com.mdd.admin.controller.decorate;
import com.mdd.admin.config.aop.Log;
import com.mdd.admin.aop.Log;
import com.mdd.admin.service.IDecoratePageService;
import com.mdd.admin.validate.DecoratePageValidate;
import com.mdd.admin.vo.decorate.DecoratePageVo;

View File

@ -1,7 +1,7 @@
package com.mdd.admin.controller.monitor;
import com.mdd.admin.config.aop.Log;
import com.mdd.admin.aop.Log;
import com.mdd.common.core.AjaxResult;
import com.mdd.common.util.StringUtils;
import org.springframework.data.redis.connection.RedisServerCommands;

View File

@ -1,6 +1,6 @@
package com.mdd.admin.controller.monitor;
import com.mdd.admin.config.aop.Log;
import com.mdd.admin.aop.Log;
import com.mdd.common.core.AjaxResult;
import com.mdd.common.core.ServerResult;
import org.springframework.web.bind.annotation.GetMapping;

View File

@ -1,6 +1,7 @@
package com.mdd.admin.controller.setting;
import com.baomidou.mybatisplus.core.toolkit.Assert;
import com.mdd.common.aop.NotPower;
import com.mdd.admin.service.ISettingDictDataService;
import com.mdd.admin.validate.commons.IdsValidate;
import com.mdd.admin.validate.commons.PageValidate;
@ -35,6 +36,7 @@ public class SettingDictDataController {
* @param params 参数
* @return jaxResult<List<SettingDictDataVo>>
*/
@NotPower
@GetMapping("/all")
public AjaxResult<List<SettingDictDataVo>> all(@RequestParam Map<String, String> params) {
Assert.isFalse(StringUtils.isEmpty(params.get("dictType")), "dictType缺失");

View File

@ -1,5 +1,6 @@
package com.mdd.admin.controller.setting;
import com.mdd.common.aop.NotPower;
import com.mdd.admin.service.ISettingDictTypeService;
import com.mdd.admin.validate.commons.IdsValidate;
import com.mdd.admin.validate.commons.PageValidate;
@ -32,6 +33,7 @@ public class SettingDictTypeController {
* @author fzr
* @return AjaxResult<List<SettingDictTypeVo>>
*/
@NotPower
@GetMapping("/all")
public AjaxResult<List<SettingDictTypeVo>> all() {
List<SettingDictTypeVo> list = iSettingDictTypeService.all();

View File

@ -1,6 +1,6 @@
package com.mdd.admin.controller.setting;
import com.mdd.admin.config.aop.Log;
import com.mdd.admin.aop.Log;
import com.mdd.admin.service.ISettingSmsService;
import com.mdd.common.core.AjaxResult;
import org.springframework.web.bind.annotation.*;

View File

@ -1,7 +1,8 @@
package com.mdd.admin.controller.system;
import com.mdd.admin.LikeAdminThreadLocal;
import com.mdd.admin.config.aop.Log;
import com.mdd.admin.aop.Log;
import com.mdd.common.aop.NotPower;
import com.mdd.admin.service.ISystemAuthAdminService;
import com.mdd.admin.validate.commons.IdValidate;
import com.mdd.admin.validate.commons.PageValidate;
@ -51,6 +52,7 @@ public class SystemAuthAdminController {
* @author fzr
* @return AjaxResult<SystemAuthSelfVo>
*/
@NotPower
@GetMapping("/self")
public AjaxResult<SystemAuthAdminSelvesVo> self() {
Integer adminId = LikeAdminThreadLocal.getAdminId();
@ -106,6 +108,7 @@ public class SystemAuthAdminController {
* @author fzr
* @return AjaxResult<Object>
*/
@NotPower
@Log(title = "管理员更新")
@PostMapping("/upInfo")
public AjaxResult<Object> upInfo(@Validated @RequestBody SystemAdminUpInfoValidate upInfoValidate) {

View File

@ -1,6 +1,7 @@
package com.mdd.admin.controller.system;
import com.alibaba.fastjson2.JSONArray;
import com.mdd.common.aop.NotPower;
import com.mdd.admin.service.ISystemAuthDeptService;
import com.mdd.admin.validate.commons.IdValidate;
import com.mdd.admin.validate.system.SystemDeptCreateValidate;
@ -31,6 +32,7 @@ public class SystemAuthDeptController {
* @author fzr
* @return AjaxResult<List<SystemAuthDeptVo>>
*/
@NotPower
@GetMapping("/all")
public AjaxResult<List<SystemAuthDeptVo>> all() {
List<SystemAuthDeptVo> list = iSystemAuthDeptService.all();

View File

@ -2,7 +2,8 @@ package com.mdd.admin.controller.system;
import com.alibaba.fastjson2.JSONArray;
import com.mdd.admin.LikeAdminThreadLocal;
import com.mdd.admin.config.aop.Log;
import com.mdd.admin.aop.Log;
import com.mdd.common.aop.NotPower;
import com.mdd.admin.service.ISystemAuthMenuService;
import com.mdd.admin.validate.commons.IdValidate;
import com.mdd.admin.validate.system.SystemMenuCreateValidate;
@ -32,9 +33,10 @@ public class SystemAuthMenuController {
* @author fzr
* @return AjaxResult<JSONArray>
*/
@NotPower
@GetMapping("/route")
public AjaxResult<JSONArray> route() {
List<Integer> roleIds = LikeAdminThreadLocal.getRoleId();
List<Integer> roleIds = LikeAdminThreadLocal.getRoleIds();
JSONArray lists = iSystemAuthMenuService.selectMenuByRoleId(roleIds);
return AjaxResult.success(lists);
}
@ -45,6 +47,7 @@ public class SystemAuthMenuController {
* @author fzr
* @return AjaxResult<JSONArray>
*/
@NotPower
@GetMapping("/list")
public AjaxResult<JSONArray> list() {
JSONArray lists = iSystemAuthMenuService.list();

View File

@ -1,5 +1,6 @@
package com.mdd.admin.controller.system;
import com.mdd.common.aop.NotPower;
import com.mdd.admin.service.ISystemAuthPostService;
import com.mdd.admin.validate.commons.IdValidate;
import com.mdd.admin.validate.commons.PageValidate;
@ -32,6 +33,7 @@ public class SystemAuthPostController {
* @author fzr
* @return AjaxResult<List<SystemAuthPostVo>>
*/
@NotPower
@GetMapping("/all")
public AjaxResult<List<SystemAuthPostVo>> all() {
List<SystemAuthPostVo> list = iSystemAuthPostService.all();

View File

@ -1,6 +1,7 @@
package com.mdd.admin.controller.system;
import com.mdd.admin.config.aop.Log;
import com.mdd.admin.aop.Log;
import com.mdd.common.aop.NotPower;
import com.mdd.admin.service.ISystemAuthRoleService;
import com.mdd.admin.validate.commons.IdValidate;
import com.mdd.admin.validate.commons.PageValidate;
@ -15,7 +16,6 @@ import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
/**
* 系统角色管理
@ -33,6 +33,7 @@ public class SystemAuthRoleController {
* @author fzr
* @return AjaxResult<List<SystemAuthRoleVo>>
*/
@NotPower
@GetMapping("/all")
public AjaxResult<List<SystemAuthRoleVo>> all() {
List<SystemAuthRoleVo> list = iSystemAuthRoleService.all();

View File

@ -1,5 +1,7 @@
package com.mdd.admin.controller.system;
import com.mdd.common.aop.NotLogin;
import com.mdd.common.aop.NotPower;
import com.mdd.admin.service.ISystemLoginService;
import com.mdd.admin.validate.system.SystemAdminLoginsValidate;
import com.mdd.admin.vo.system.SystemCaptchaVo;
@ -27,6 +29,7 @@ public class SystemLoginController {
* @author fzr
* @return AjaxResult<SystemCaptchaVo>
*/
@NotLogin
@GetMapping("/captcha")
public AjaxResult<SystemCaptchaVo> captcha() {
SystemCaptchaVo vo = iSystemLoginService.captcha();
@ -40,6 +43,7 @@ public class SystemLoginController {
* @param loginsValidate 登录参数
* @return AjaxResult<SystemLoginVo>
*/
@NotLogin
@PostMapping("/login")
public AjaxResult<SystemLoginVo> login(@Validated() @RequestBody SystemAdminLoginsValidate loginsValidate) {
SystemLoginVo vo = iSystemLoginService.login(loginsValidate);
@ -53,6 +57,7 @@ public class SystemLoginController {
* @param request 请求接口
* @return AjaxResult<Object>
*/
@NotPower
@PostMapping("/logout")
public AjaxResult<Object> logout(HttpServletRequest request) {
iSystemLoginService.logout(request.getHeader("token"));

View File

@ -9,7 +9,6 @@ import com.mdd.admin.vo.system.SystemAuthAdminDetailVo;
import com.mdd.admin.vo.system.SystemAuthAdminListedVo;
import com.mdd.admin.vo.system.SystemAuthAdminSelvesVo;
import com.mdd.common.core.PageResult;
import com.mdd.common.entity.system.SystemAuthAdmin;
/**
* 系统管理员服务接口类
@ -86,9 +85,4 @@ public interface ISystemAuthAdminService {
*/
void disable(Integer id, Integer adminId);
/**
* 缓存管理员
*/
void cacheAdminUserByUid(Integer id);
}

View File

@ -40,12 +40,4 @@ public interface ISystemAuthPermService {
*/
void batchDeleteByMenuId(Integer menuId);
/**
* 缓存角色菜单
*
* @author fzr
* @param roleId 角色ID
*/
void cacheRoleMenusByRoleId(Integer roleId);
}

View File

@ -1,13 +1,11 @@
package com.mdd.admin.service.impl;
import cn.dev33.satoken.stp.StpUtil;
import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Assert;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.query.MPJQueryWrapper;
import com.mdd.admin.config.AdminConfig;
import com.mdd.admin.service.ISystemAuthAdminService;
import com.mdd.admin.service.ISystemAuthPermService;
import com.mdd.admin.validate.commons.PageValidate;
@ -330,8 +328,6 @@ public class SystemAuthAdminServiceImpl implements ISystemAuthAdminService {
}
systemAuthAdminMapper.updateById(model);
this.cacheAdminUserByUid(updateValidate.getId());
if (StringUtils.isNotNull(updateValidate.getPassword()) && StringUtils.isNotEmpty(updateValidate.getPassword())) {
StpUtil.kickout(updateValidate.getId());
}
@ -371,8 +367,6 @@ public class SystemAuthAdminServiceImpl implements ISystemAuthAdminService {
}
systemAuthAdminMapper.updateById(model);
this.cacheAdminUserByUid(adminId);
if (StringUtils.isNotNull(upInfoValidate.getPassword()) && StringUtils.isNotEmpty(upInfoValidate.getPassword())) {
StpUtil.kickout(adminId);
}
@ -402,7 +396,6 @@ public class SystemAuthAdminServiceImpl implements ISystemAuthAdminService {
model.setIsDelete(1);
model.setDeleteTime(System.currentTimeMillis() / 1000);
systemAuthAdminMapper.updateById(model);
this.cacheAdminUserByUid(id);
StpUtil.kickout(id);
}
@ -429,37 +422,10 @@ public class SystemAuthAdminServiceImpl implements ISystemAuthAdminService {
systemAuthAdmin.setIsDisable(disable);
systemAuthAdmin.setUpdateTime(TimeUtils.timestamp());
systemAuthAdminMapper.updateById(systemAuthAdmin);
this.cacheAdminUserByUid(id);
if (disable.equals(1)) {
StpUtil.kickout(id);
}
}
/**
* 缓存管理员
*/
@Override
public void cacheAdminUserByUid(Integer id) {
SystemAuthAdmin sysAdmin = systemAuthAdminMapper.selectOne(
new QueryWrapper<SystemAuthAdmin>()
.select("id,role_ids,username,nickname,is_multipoint,is_disable,is_delete")
.eq("id", id)
.last("limit 1"));
Map<String, Object> user = new LinkedHashMap<>();
user.put("id", sysAdmin.getId());
user.put("roleIds", sysAdmin.getRoleIds());
user.put("username", sysAdmin.getUsername());
user.put("nickname", sysAdmin.getNickname());
user.put("isMultipoint", sysAdmin.getIsMultipoint());
user.put("isDisable", sysAdmin.getIsDisable());
user.put("isDelete", sysAdmin.getIsDelete());
Map<String, Object> map = new LinkedHashMap<>();
map.put(String.valueOf(sysAdmin.getId()), JSON.toJSONString(user));
RedisUtils.hmSet(AdminConfig.backstageManageKey, map);
}
}

View File

@ -148,8 +148,6 @@ public class SystemAuthMenuServiceImpl implements ISystemAuthMenuService {
model.setCreateTime(System.currentTimeMillis() / 1000);
model.setUpdateTime(System.currentTimeMillis() / 1000);
systemAuthMenuMapper.insert(model);
RedisUtils.del(AdminConfig.backstageRolesKey);
}
/**
@ -178,8 +176,6 @@ public class SystemAuthMenuServiceImpl implements ISystemAuthMenuService {
model.setIsDisable(updateValidate.getIsDisable());
model.setUpdateTime(System.currentTimeMillis() / 1000);
systemAuthMenuMapper.updateById(model);
RedisUtils.del(AdminConfig.backstageRolesKey);
}
/**
@ -205,8 +201,6 @@ public class SystemAuthMenuServiceImpl implements ISystemAuthMenuService {
systemAuthMenuMapper.deleteById(id);
iSystemAuthPermService.batchDeleteByMenuId(id);
RedisUtils.del(AdminConfig.backstageRolesKey);
}
}

View File

@ -111,39 +111,4 @@ public class SystemAuthPermServiceImpl implements ISystemAuthPermService {
systemAuthPermMapper.delete(new QueryWrapper<SystemAuthPerm>().eq("menu_id", menuId));
}
/**
* 缓存角色菜单
*
* @author fzr
* @param roleId 角色ID
*/
@Override
public void cacheRoleMenusByRoleId(Integer roleId) {
List<Integer> menuIds = new LinkedList<>();
List<String> menuArray = new LinkedList<>();
List<SystemAuthPerm> systemAuthPerms = systemAuthPermMapper.selectList(
new QueryWrapper<SystemAuthPerm>().eq("role_id", roleId));
for (SystemAuthPerm systemAuthPerm : systemAuthPerms) {
menuIds.add(systemAuthPerm.getMenuId());
}
if (menuIds.size() > 0) {
List<SystemAuthMenu> systemAuthMenus = systemAuthMenuMapper.selectList(new QueryWrapper<SystemAuthMenu>()
.select("id,perms")
.eq("is_disable", 0)
.in("id", menuIds)
.in("menu_type", Arrays.asList("C", "A"))
.orderByAsc(Arrays.asList("menu_sort", "id")));
for (SystemAuthMenu item : systemAuthMenus) {
if (StringUtils.isNotNull(item.getPerms()) && StringUtils.isNotEmpty(item.getPerms())) {
menuArray.add(item.getPerms().trim());
}
}
}
RedisUtils.hSet(AdminConfig.backstageRolesKey, String.valueOf(roleId), ArrayUtils.listToStringByStr(menuArray, ","));
}
}

View File

@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Assert;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.mdd.admin.config.AdminConfig;
import com.mdd.admin.service.ISystemAuthPermService;
import com.mdd.admin.service.ISystemAuthRoleService;
import com.mdd.admin.validate.commons.PageValidate;
@ -16,7 +15,6 @@ import com.mdd.common.entity.system.SystemAuthAdmin;
import com.mdd.common.entity.system.SystemAuthRole;
import com.mdd.common.mapper.system.SystemAuthAdminMapper;
import com.mdd.common.mapper.system.SystemAuthRoleMapper;
import com.mdd.common.util.RedisUtils;
import com.mdd.common.util.TimeUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
@ -192,7 +190,6 @@ public class SystemAuthRoleServiceImpl implements ISystemAuthRoleService {
iSystemAuthPermService.batchDeleteByRoleId(updateValidate.getId());
iSystemAuthPermService.batchSaveByMenuIds(updateValidate.getId(), updateValidate.getMenuIds());
RedisUtils.del(AdminConfig.backstageRolesKey);
}
/**
@ -219,7 +216,6 @@ public class SystemAuthRoleServiceImpl implements ISystemAuthRoleService {
systemAuthRoleMapper.deleteById(id);
iSystemAuthPermService.batchDeleteByRoleId(id);
RedisUtils.del(AdminConfig.backstageRolesKey);
}
}

View File

@ -149,7 +149,6 @@ public class SystemLoginServiceImpl implements ISystemLoginService {
// 记录登录日志
this.recordLoginLog(sysAdmin.getId(), loginsValidate.getUsername(), "");
iSystemAuthAdminService.cacheAdminUserByUid(sysAdmin.getId());
// 响应登录信息
SystemLoginVo vo = new SystemLoginVo();

View File

@ -0,0 +1,12 @@
package com.mdd.common.aop;
import java.lang.annotation.*;
/**
* 免登录校验注解类
*/
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface NotLogin {
}

View File

@ -0,0 +1,12 @@
package com.mdd.common.aop;
import java.lang.annotation.*;
/**
* 免权限校验注解类
*/
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface NotPower {
}