我已经以这种方式为我的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)
{
}
答案 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 {
}
祝你好运......