我有一个spring应用程序,我想对每个控制器的所有调用添加高级验证,这将验证权限方式的路径变量值
例子:
@RestController
@RequestMapping(value = "/user/{userId}", produces = "application/json")
public class ValidationController {
@PostMapping(value = "/update-status")
@ResponseBody
public void updateStatus(@PathVariable Integer userId) {
////////some code;
}
}
应该类似于
@Component
@Aspect
@Order(1)
public class ValidationTokenInterceptor {
@Around("@within(controller)")
public Object checkController(ProceedingJoinPoint thisJoinPoint, Controller controller) throws Throwable {
Object[] args = thisJoinPoint.getArgs();
MethodSignature methodSignature = (MethodSignature) thisJoinPoint.getStaticPart().getSignature();
Method method = methodSignature.getMethod();
Annotation[][] parameterAnnotations = method.getParameterAnnotations();
assert args.length == parameterAnnotations.length;
for (int argIndex = 0; argIndex < args.length; argIndex++) {
for (Annotation annotation : parameterAnnotations[argIndex]) {
if (!(annotation instanceof RequestParam))
continue;
RequestParam requestParam = (RequestParam) annotation;
if (! "accessToken".equals(requestParam.value()))
continue;
System.out.println(" " + requestParam.value() + " = " + args[argIndex]);
}
}
joinPoint.proceed(joinPoint.getArgs());
}
}
也要归功于这个答案:从ProceedingJoinPoint检索参数值
我有一门课: 如何测试它?我试过这样做:如何使用JUnit测试类的验证注释?但这不起作用,因为我的验证器中的validate方法需要传递给它的方法签名的类。 我不知道是否可以将此错误传递给验证器。还有别的办法吗?
重要的一点在这里: 当我运行这行(从VS代码运行iPhone模拟器)时,控制台上没有任何消息,调试会话结束,模拟器屏幕变为黑色,几秒钟后返回主屏幕。 我对所有这些都是新手,但我唯一的想法是:当我在控制台上打印时,我得到的是 闭包:({String phoneNumber,Duration timeout,int forceResendingToken,(AuthCredential)=>void
我试图编写一个连接应用程序,将从外部来源接收一组数据,并通过其API将其放在microsoft dynamics 365 business central的实例中。文档说明有两种方法可以做到这一点,使用基本身份验证和通过Azure Active Directory登录。前者以编程方式简单明了,但文档非常清楚地表明,它不适用于生产环境。我可以使用邮递员来完成后一种操作,但过程的一部分涉及到我在弹出窗
在我的项目中,当我只需单击主页上的“加入房间”按钮时,它会将我指向特定的房间。以房间号为例;它发生在xPOgk21523aqPW上,它通过一个像localhost:3000/room/xPOgk21523aqPW这样的扩展来实现。当我进行重定向时,我所在组件的名称是Player。我想要的是,当我将Homapage.js重定向到Player.js时,能够使用Player.js中的代码“xPOgk21
我明白验证在应用程序的几个层中都是必需的。但是,如果要在所有层中实施的验证都是相同的(大多数情况下都是这样),那么使用一个公共的验证框架是有意义的。这是Hibernate验证器的目标之一。 那么,哪条路走得更好呢?
我知道有一个有效的注释,它指示spring根据JSR-303验证一个控制器参数,在这个示例中: 但我希望能够以某种方式配置Spring,以便在所有控制器中启用验证,而无需明确指定有效的注释。 这有可能吗?一些Spring配置?利用AOP?。。。