AOP
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface PermissionToCheck {
UserTypeEnum type() default UserTypeEnum.ALL;
}
枚举类型
public enum UserTypeEnum {
ADMIN(1L,"管理员"),
USER(2L,"普通用户"),
ALL(3L,"所有人");
private Long id;
private String name;
UserTypeEnum(Long id, String name) {
this.id = id;
this.name = name;
}
public Long getId() {
return id;
}
public String getName() {
return name;
}
}
@Aspect
@Component
public class PermissionToCheckAspectj {
@Autowired
private TokenUtils tokenUtils;
@Before("@annotation(com.example.bigzhangblogmaster.annotation.PermissionToCheck)")
public void check(JoinPoint proceedingJoinPoint) throws Exception{
MethodSignature signature = (MethodSignature)proceedingJoinPoint.getSignature();
PermissionToCheck annotation1 = signature.getMethod().getAnnotation(PermissionToCheck.class);
if ( annotation1!= null) {
ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
String token = requestAttributes.getRequest().getHeader("token");
Long userId = tokenUtils.getUserId(token);
UserTypeEnum type = annotation1.type();
Assert.isTrue((userId != type.getId() && userId != 3),PermissionException::new);
}
}
}
全局异常捕捉器
@RestControllerAdvice
public class DemoController {
@ExceptionHandler(value = PermissionException.class)
public JsonResult permissionException(PermissionException P){
String message = P.getMessage();
return ResultUtils.faileAndData(message,ResultCode.DATA_IS_WRONG);
}
}
具体操作
@PermissionToCheck(type = UserTypeEnum.USER)
@GetMapping
public JsonResult getUserProfile(ServletRequest request){
HttpServletRequest req = (HttpServletRequest) request;
String token = req.getHeader(TokenUtils.TOKEN_NAME);
Long userId = tokenUtils.getUserId(token);
if (userId != null){
Map<String,Object> map = new HashMap<>();
SysUser user = userService.getById(userId);
String userIdentity = userService.getUserIdentity(userId);
map.put("user",user);
map.put("roleGroup",userIdentity);
return ResultUtils.success(map, ResultCode.SUCCESS);
}else {
return ResultUtils.faile(ResultCode.DATA_IS_WRONG);
}
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/ac89ccdf7703484a84aa61a1bf750e06.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Yqq5Yqb5a2m5Lmg55qE54uX,size_20,color_FFFFFF,t_70,g_se,x_16)