取决于当前登录主体的验证规则

Validation rule that depends on currently logged principal

我在 EJB 中有一些业务方法接收 DTO 作为参数,即:

public void someMethod(SomeClass someArgument);

我想定义一个验证参数的自定义验证器(请注意,我想将其作为参数进行验证,而不是在 class 级别,尽管如果有人有涉及它的解决方法,我们欢迎).验证需要来自当前记录的主体的数据,例如,通过使用 @Context 注释将其注入 SecurityContext。

因此,我的第一个方法是为 SomeClass 实现一个带有 PARAMETER 目标的新 ConstraintValidator。问题是,我认为在这个 ConstraintValidator 中注入带有 @Context 的 SecurityContext 是行不通的,因为 bean-validation api 要求 isValid 方法应该是线程安全的,所以我想这个验证实例被重用了同时,然后注入的 SecurityContext 将不起作用。

我的猜测对吗?您将如何处理这种需要使用安全上下文提供的信息来执行验证的用例?我知道如何使用 spring 安全性,但不是在 javaee(版本 7)环境中。

Bean 验证 v1.1 与 cdi 集成。理论上,您可以在验证器中注入预定义的 bean Principal。不存在线程问题,因为约束由 BV 框架调用。 所以在你的自定义验证器中我会这样做:

@Inject private Principal principal