2016-03-07 43 views
2

我已經在一個文件中定義CheckSessionFilter.java的過濾器,像這樣:JAX-RS過濾掉不獲取調用

@Provider 
@SessionChecker 
public class CheckSessionFilter implements ContainerRequestFilter { 

    @Override 
    public void filter(ContainerRequestContext requestContext) throws WebApplicationException { 
     .... 
    } 

在另一個文件中,SessionChecker.java,我有:

@Target({ ElementType.TYPE, ElementType.METHOD }) 
@Retention(value = RetentionPolicy.RUNTIME) 
@NameBinding 
public @interface SessionChecker {} 

我的Web服務在Services.java中定義爲:

@Path("Services") 
public class Services { 

    @POST 
    @SessionChecker 
    @Consumes(MediaType.APPLICATION_JSON) 
    @Produces(MediaType.APPLICATION_JSON) 
    @Path("LogIn") 
    public Response logIn(@Context HttpServletRequest request, Parameters requestParameters) { 
     .... 
    } 
} 

我在WebLogic 12.2.1上部署了我的Web服務。該Web服務正常工作。但是過濾器根本沒有被調用。什麼可能是錯的?

我需要將任何東西放在web.xml中嗎?

在此先感謝。

編輯,包括web.xml中:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> 
    <display-name>XXXXXXXX</display-name> 
    <servlet> 
     <servlet-name>JAX-RS Application</servlet-name> 
     <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> 
     <init-param> 
      <param-name>javax.ws.rs.Application</param-name> 
      <param-value>rest.application.config.ApplicationConfig</param-value> 
     </init-param> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>JAX-RS Application</servlet-name> 
     <url-pattern>/*</url-pattern> 
    </servlet-mapping> 
</web-app> 

更新的web.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> 
    <display-name>XXXXXXXX</display-name> 
    <servlet> 
     <servlet-name>JAX-RS Application</servlet-name> 
     <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
     <init-param> 
      <param-name>javax.ws.rs.Application</param-name> 
      <param-value>rest.application.config.ApplicationConfig</param-value> 
     </init-param> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>JAX-RS Application</servlet-name> 
     <url-pattern>/*</url-pattern> 
    </servlet-mapping> 
</web-app> 

編輯以添加應用程序配置:

package rest.application.config; 

import java.util.Set; 
import javax.ws.rs.core.Application; 
import javax.ws.rs.ApplicationPath; 

@ApplicationPath("resources") 
public class ApplicationConfig extends Application { 

    public Set<Class<?>> getClasses() { 
     return getRestClasses(); 
    } 

    //Auto-generated from RESTful web service wizard 
    private Set<Class<?>> getRestClasses() { 
     Set<Class<?>> resources = new java.util.HashSet<Class<?>>(); 
     resources.add(Services.class); 
     return resources;  
    } 
} 
+0

您是否已經在web.xml中定義了前端控制器和url模式? –

+0

我編輯了我的帖子以包含web.xml。正如我原來的帖子中提到的,我的web服務工作正常。只是過濾器沒有被調用。你在說什麼前端控制器?我已經看過關於過濾器的所有例子,以及關於前端控制器的其他例子。 – user3573403

+0

看起來您正在使用Jersey 1.x(com.sun..ServletContainer),但ContainerRequestFilter是Jersey(Jax-RS)-2.x過濾器。澤西1.x有相同的過濾器,但它是在一個不同的包裝,有一個不同的接口合同 –

回答

0

感謝peeskillet,我發現該解決方案將在ApplicationConfig類中添加過濾器,如下面的代碼所示。我還需要使用org.glassfish.jersey.servlet.ServletContainer作爲web.xml中的servlet容器,用於Jersey 2.x.

package rest.application.config; 

import java.util.Set; 
import javax.ws.rs.core.Application; 
import javax.ws.rs.ApplicationPath; 

@ApplicationPath("resources") 
public class ApplicationConfig extends Application { 

    public Set<Class<?>> getClasses() { 
     return getRestClasses(); 
    } 

    //Auto-generated from RESTful web service wizard 
    private Set<Class<?>> getRestClasses() { 
     Set<Class<?>> resources = new java.util.HashSet<Class<?>>();   
     resources.add(Services.class); 
     resources.add(CheckSessionFilter.class); 
     return resources;  
    } 
}