我创建了一个名为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}}包含多次调用我的自定义注释的类。
谢谢,