为什么注入值有时在我的自定义ConstraintValidator中为null?

时间:2014-01-26 20:10:23

标签: java java-ee ejb ejb-3.0 stateless-session-bean

我创建了一个名为ConstraintValidator的自定义APIAuth注释, 我尝试使用@Context HttpServletRequest获取远程用户IP地址,但问题是在我的无状态调用APIAuth时,APIAuth自定义验证程序工作,并且它获取远程用户ip地址,但是当我尝试再次快速刷新请求时,它会抛出一个异常,因为@Context HttpServletRequest在这种情况下为空,我需要等待几秒才能尝试请求Stateless Restful再次。

我的APIAuth代码:

APIAuth.class

@Documented
@Constraint(validatedBy = APIAuthValidator.class)
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface APIAuth {
    String message() default "";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

APIAuthValidator.class

public class APIAuthValidator implements ConstraintValidator<APIAuth, String> {

@Context
private HttpServletRequest client;

@Override
public void initialize(APIAuth constraintAnnotation) {
}

@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
    boolean valid = "127.0.0.1".equals(client.getRemoteAddr());

    return valid;
}

注意:我还注意到,当我首先在initialize()构造函数中定义远程用户ip地址时,它会缓存该值,并且在几秒钟之后没有更新它,尽管刷新请求{{ 1}}包含多次调用我的自定义注释的类。

谢谢,

0 个答案:

没有答案