Лучший способ добиться этого - использование аспектов Spring AOP.
Предположим, у вас есть аннотация, подобная этой
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ValidateAction {
String resource();
String release();
}
Затем напишите аспект, подобный этому
@Aspect
@Component
public class AspectClass {
@Around(" @annotation(com.yourpackage.ValidateAction)")
public Object validateAspect(ProceedingJoinPoint pjp) throws Throwable {
MethodSignature signature = (MethodSignature) pjp.getSignature();
Method method = signature.getMethod();
ValidateAction validateAction = method.getAnnotation(ValidateAction.class);
String release = validateAction.release();
String resource = validateAction.resource();
// Call your Authorization server and check if all is good
if( hasAccess)
pjp.proceed();
.......
}
}
Элемент управления придет к методу validateAspect, когда любой метод, который являетсяс пометкой @ValidateAction
называется.Здесь вы фиксируете значения аннотаций, как показано, и делаете необходимую проверку.
Убедитесь, что у вас есть нужные зависимости, и этот импорт
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;
import java.lang.reflect.Method;