我有一个过滤器,如果发送到的资源带有 IdValidation 注释,则该过滤器应该验证传入请求的 ID。 我尝试在 web xml 中添加此过滤器,如 this 中所述。教程。但是,当使用 IdValidation 注释测试方法时,不会调用过滤器。
@Provider
@IdValidation
public class IdValidationFilter implements ContainerRequestFilter {
@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
this.requestContext = requestContext;
MultivaluedMap<String, String> map = requestContext.getUriInfo().getPathParameters();
if (map.containsKey("someId")) {
// Do some validation and abort if nessecary
}
}
}
我用来添加此过滤器的界面。
@NameBinding
@Retention(RetentionPolicy.RUNTIME)
public @interface IdValidation {}
网络 XML。我一开始尝试不使用提供程序类名,因为我认为这是不必要的,因为过滤器位于同一个包中,但这也不起作用。
<servlet>
<servlet-name>Jersey Web Application</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>my.package</param-value>
</init-param>
<init-param>
<param-name>jersey.config.server.provider.classnames</param-name>
<param-value>my.package.IdValidationFilter</param-value>
</init-param>
</servlet>
最佳答案
尝试这个代码 -
import java.io.IOException;
import java.lang.annotation.Annotation;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.ext.Provider;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerRequestFilter;
import javax.ws.rs.container.ResourceInfo;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.Response;
@Provider
public class IdValidationFilter implements ContainerRequestFilter {
@Context
private ResourceInfo resourceInfo;
@Context
private HttpServletRequest request;
@Override
public void filter(final ContainerRequestContext requestContext) throws IOException {
for (Annotation annotation : resourceInfo.getResourceMethod().getDeclaredAnnotations()) {
if (IdValidation.class == annotation.annotationType()) {
this.requestContext = requestContext;
MultivaluedMap<String, String> map = requestContext.getUriInfo().getPathParameters();
if (map.containsKey("someId")) {
// Do some validation and abort if nessecary
}
}
}
}
}
关于java - 通过 web xml 进行 Jersey 过滤器注册不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36978130/