我怎样才能在web.xml文件中配置跳过一个类而不去下容ContainerRequestFilters?

时间:2014-11-17 09:39:24

标签: java jersey jax-rs

我已经以这种方式为我的Jersey Webservices配置了过滤器

 <servlet>
      <servlet-name>Admin</servlet-name>
      <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
      <init-param>
         <param-name>com.sun.jersey.config.property.packages</param-name>
         <param-value>com.services.admin</param-value>
      </init-param>
      <init-param>
         <param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name>
         <param-value>com.util.SessionCheckFilter</param-value>
      </init-param>
      <load-on-startup>1</load-on-startup>
   </servlet>

   <servlet-mapping>
      <servlet-name>Admin</servlet-name>
      <url-pattern>/admin/*</url-pattern>
   </servlet-mapping>

强制包com.services.admin下的每个班级; to go com.util.SessionCheckFilter check

在SessionCheckFilter类里面我有这个逻辑

public class SessionCheckFilter implements ContainerRequestFilter { 
@Context HttpServletRequest req ;
    @Override 
    public ContainerRequest filter(ContainerRequest cr) {
     HttpSession session = req.getSession(false);
        if(session==null){
            throw new WebApplicationException(401); // Throw new UnAuthorized 
            return cr;  
        }
        else {
            return cr;
        }
    }
}

我的问题是,我是否可以跳过一个名为AdminLogin.java的类,以便不进行SessionCheckFilter检查?

package com.services.admin;
@Path("/adminlogin")
public class AdminLogin {
    @GET
    @Consumes("application/text")
    @Produces("application/json")
    public String adminLogin(   
            @QueryParam(value="password")String password,
            @QueryParam(value="admin_mobile")String admin_mobile,@Context HttpServletRequest hsr)
{

}

1 个答案:

答案 0 :(得分:0)

我正在使用自定义注释执行类似于您正在寻找的内容。

如果将ResourceInfo注入过滤器,则可以在类或方法级别查找资源上定义的注释。

@Context
private ResourceInfo resourceInfo;

在您的情况下,如果注释MyIgnoreAnnotation存在,您只需绕过过滤器逻辑。

if(resource.getResourceClass().isAnnotationPresent(MyIgnoreAnnotation.class))
    return;

最后是注释。你应该将它重命名为有意义的东西。

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MyIgnoreAnnotation {
}
祝你好运......