代码之家  ›  专栏  ›  技术社区  ›  PKuhn

通过web xml注册Jersey筛选器无效

  •  0
  • PKuhn  · 技术社区  · 10 年前

    我有一个过滤器,如果发送到的资源用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 {}
    

    web 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>
    
    2 回复  |  直到 10 年前
        1
  •  1
  •   Rakesh Chouhan    10 年前

    试试这个代码-

    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
                }
                }
            }
        }
    
    }
    
        2
  •  0
  •   sven-torben    10 年前

    如果你想验证一个参数,我建议你看看泽西岛 Bean Validation 支持

    推荐文章