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

时间:2015-08-01 22:22:01

标签: java java-ee ejb jax-rs bean-validation

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

public void someMethod(SomeClass someArgument);

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

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

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

1 个答案:

答案 0 :(得分:3)

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

@Inject private Principal principal