业务场景:
在执行某个controller下的方法时,需要验证身份后才能执行(新增)。
分析:
现在缺少身份认证的代码,该controller下的方法数量多,在方法里一个个加不现实,需要有个改动量少,且不用后期频繁维护的解决方案,最终决定使用注解AOP添加前置代码。
实现:
1.编写注解类
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface BeforeExecution {
String menuAuthCheck() default "";
}
2.编写Aspect类(AOP实现)
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class SecurityAspect {
@Pointcut("@annotation(com.estar.interfaces.admin.annotation.anno.BeforeExecution)")
public void setAnnotationAspect(){
}
@Before("setAnnotationAspect()")
public void beforeExecutionAdvice(JoinPoint joinPoint) {
// todo 前置代码内容
}
}
3.在方法上添加对应注解
@BeforeExecution(menuAuthCheck="admin")
public void addUser(){
//...
}