gpt4 book ai didi

spring - Controller 方法上的自定义注释以拦截请求并验证

转载 作者:行者123 更新时间:2023-12-02 09:53:48 28 4
gpt4 key购买 nike

我想创建一个注释,我将在 Controller 方法上使用该注释来验证对资源的访问。我编写了拦截器来拦截请求,还编写了代码来为它们的独立场景创建注释。现在我想拦截请求并获取注释中提供的值以进行进一步处理。

理想情况下

@RequestMapping("/release")
@ValidateAction("resource","release") //custom annotation that will accept two strings
public ResponseEntity releaseSoftware(Request request){
}

根据上面的内容,我必须从 @ValidateAction 获取这两个值,并向另一个授权服务器发送请求,以在用户有权访问该操作时授权该操作(请求包含将用于授权的 oauth 访问 token )并返回如果用户有访问权限则为 true,否则抛出 AcceeDenied 异常。谁能指出我在 Spring boot 环境中执行此操作的正确方向

最佳答案

实现这一点的最佳方法是使用 Spring AOP Aspects。

让我们假设您有这样的注释

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ValidateAction {

String resource();
String release();
}

然后写一个这样的Aspect

@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();

.......
}
}

当任何使用@ValidateAction注释的方法被调用时,控制都会来到validateAspect方法。您可以在此处捕获所示的注释值并进行必要的检查。

确保您拥有所需的正确依赖项和这些导入

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;

关于spring - Controller 方法上的自定义注释以拦截请求并验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50607456/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com