在项目中,spring aop 可以对类,方法的执行进行一些加工,本文使用spring aop 加自定义注解来实现权限管理。
思路:
当一个请求请求某个controller层的方法时,会被aop提前拦截处理,看该方法上指定注解的值该登录用户是否有权限访问,有则放行,无则直接返回。
核心代码:
@Configuration
@Aspect
public class AnnotationAop {
@Before("within(@org.springframework.web.bind.annotation.RestController *) && @annotation(basicsHasPermission)")
public void testAop(JoinPoint joinPoint, BasicsHasPermission basicsHasPermission) throws Exception {
// 方法参数
Object[] args = joinPoint.getArgs();
for (int i = 0; i < args.length; i++) {
System.out.println(args[i]);
}
// 获取方法
Object target = joinPoint.getTarget();
String methodName = joinPoint.getSignature().getName();
// 获取参数类型
Class<?>[] parameterTypes = ((MethodSignature)joinPoint.getSignature()).getMethod().getParameterTypes();
Method method = target.getClass().getMethod(methodName,parameterTypes);
BasicsHasPermission myValidatorAnnotation = method.getAnnotation(BasicsHasPermission.class);
String value = myValidatorAnnotation.value();
String[] values = myValidatorAnnotation.values();
if (value == "666") {
System.out.println("同行");
} else {
System.out.println("拒绝");
}
}
}
如代码所示,这份aop代码会在所有的符合条件的方法上加一个切点,并对自定义注解进行验证。
自定义注解代码:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface BasicsHasPermission {
public String value() default "666";
}