v1.11.0 新特性:AOP注解鉴权

This commit is contained in:
shengzhang
2021-01-09 17:24:44 +08:00
parent 1028ac0fe6
commit fbff086ed9
10 changed files with 233 additions and 57 deletions

View File

@@ -1,15 +1,13 @@
package cn.dev33.satoken.interceptor;
import java.lang.reflect.Method;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaCheckRole;
import cn.dev33.satoken.annotation.SaMode;
import cn.dev33.satoken.stp.StpLogic;
import cn.dev33.satoken.stp.StpUtil;
@@ -52,56 +50,10 @@ public class SaCheckInterceptor implements HandlerInterceptor {
if (handler instanceof HandlerMethod == false) {
return true;
}
HandlerMethod method = (HandlerMethod ) handler;
Method method = ((HandlerMethod) handler).getMethod();
// ----------- 验证登录
if(method.hasMethodAnnotation(SaCheckLogin.class) || method.getBeanType().isAnnotationPresent(SaCheckLogin.class)) {
stpLogic.checkLogin();
}
// ----------- 验证角色
// 验证方法上的
SaCheckRole scr = method.getMethodAnnotation(SaCheckRole.class);
if(scr != null) {
String[] roleArray = scr.value();
if(scr.mode() == SaMode.AND) {
stpLogic.checkRoleAnd(roleArray); // 必须全部都有
} else {
stpLogic.checkRoleOr(roleArray); // 有一个就行了
}
}
// 验证类上的
scr = method.getBeanType().getAnnotation(SaCheckRole.class);
if(scr != null) {
String[] roleArray = scr.value();
if(scr.mode() == SaMode.AND) {
stpLogic.checkRoleAnd(roleArray); // 必须全部都有
} else {
stpLogic.checkRoleOr(roleArray); // 有一个就行了
}
}
// ----------- 验证权限
// 验证方法上的
SaCheckPermission scp = method.getMethodAnnotation(SaCheckPermission.class);
if(scp != null) {
String[] permissionArray = scp.value();
if(scp.mode() == SaMode.AND) {
stpLogic.checkPermissionAnd(permissionArray); // 必须全部都有
} else {
stpLogic.checkPermissionOr(permissionArray); // 有一个就行了
}
}
// 验证类上的
scp = method.getBeanType().getAnnotation(SaCheckPermission.class);
if(scp != null) {
String[] permissionArray = scp.value();
if(scp.mode() == SaMode.AND) {
stpLogic.checkPermissionAnd(permissionArray); // 必须全部都有
} else {
stpLogic.checkPermissionOr(permissionArray); // 有一个就行了
}
}
// 进行验证
stpLogic.checkMethodAnnotation(method);
// 通过验证
return true;