映射

2014-09-21 52 views
0

在web.xml有這樣一個servlet:映射

<servlet> 
     <servlet-name>Bla</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <init-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value></param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>Bla</servlet-name> 
     <url-pattern>/*</url-pattern> 
    </servlet-mapping> 

和我有一個球衣濾波器和approp。 web.xml設置爲:

<servlet> 
     <servlet-name>MY API</servlet-name> 
     <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> 
     <init-param> 
      <param-name>com.sun.jersey.spi.container.ContainerResponseFilters</param-name> 
      <param-value>BlaResponseFilter</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>MY API</servlet-name> 
     <url-pattern>/*</url-pattern> 
    </servlet-mapping> 

目標是將過濾器綁定到任何響應。

當然不工作由於多個servlet映射到相同的路徑(/ *)

什麼是另一種方式來做到這一點?我需要在生成響應時但在將請求發送給用戶之前運行特殊代碼。

+0

什麼你試過這麼遠嗎?最後** ContainerResponseFilter **和自定義** MessageBodyWriter **? – zyexal 2014-09-21 16:54:12

回答

0

int部署描述符中com.sun.jersey.spi.container.ContainerRequestFilters的值應該是一個實現com.sun.jersey.spi.container.ContainerRequestFilter接口的類,它必須覆蓋filter方法。

所以提供價值似乎不是合法的。 regiter它

package some.package.filter; 
import com.sun.jersey.spi.container.ContainerRequest; 
import com.sun.jersey.spi.container.ContainerRequestFilter; 

public class BlaResponseFilter implements ContainerRequestFilter { 
@Override 
public ContainerRequest filter(ContainerRequest request) { 
    // you custom operations 
    return request; 
} 
} 

然後:創建你自己的過濾器

<servlet> 
    <servlet-name>MY_API</servlet-name><!-- Avoid space characters --> 
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> 
    <init-param> 
     <param-name>com.sun.jersey.spi.container.ContainerResponseFilters</param-name> 
     <param-value>some.package.filter.BlaResponseFilter</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>MY_API</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping>