AOP注解AOP面向切面编程 就是不修改原有业务代码统一给方法加通用功能日志、权限、事务、性能监控、参数校验等。通过这段定义不难看出如果我们想要统一实现角色验证也可用AOP切面编程来实现。接下来我将要通过自定义注解的方式封装角色校验的方法。项目目录具体代码如下Around(annotation(authCheck))publicObjectdoInterceptor(ProceedingJoinPointjoinPoint,AuthCheckauthCheck)throwsThrowable{ListStringanyRoleArrays.stream(authCheck.anyRole()).filter(StringUtils::isNotBlank).collect(Collectors.toList());StringmustRoleauthCheck.mustRole();RequestAttributesrequestAttributesRequestContextHolder.currentRequestAttributes();HttpServletRequestrequest((ServletRequestAttributes)requestAttributes).getRequest();// 当前登录用户UseruseruserService.getLoginUser(request);// 拥有任意权限即通过if(CollectionUtils.isNotEmpty(anyRole)){StringuserRoleuser.getUserRole();if(!anyRole.contains(userRole)){thrownewBusinessException(ErrorCode.NO_AUTH_ERROR);}}// 必须有所有权限才通过if(StringUtils.isNotBlank(mustRole)){StringuserRoleuser.getUserRole();if(!mustRole.equals(userRole)){thrownewBusinessException(ErrorCode.NO_AUTH_ERROR);}}// 通过权限校验放行returnjoinPoint.proceed();}Around环绕通知方法执行前后都能控制annotation(authCheck)切点 所有加了 AuthCheck 注解的方法自定义注解/** * 权限校验 * * author yupi */Target(ElementType.METHOD)Retention(RetentionPolicy.RUNTIME)publicinterfaceAuthCheck{/** * 有任何一个角色 * * return */String[]anyRole()default;/** * 必须有某个角色 * * return */StringmustRole()default;}接下来在controller中对需要拦截并进行角色校验的方法上添加AutoCheck注解