2013-03-22 67 views
3

我有一個實現ContainerRequestFilter一類,我想進去,所以我需要讓春天知道澤西過濾器注入一些Spring的依賴。過濾器本身在我的web.xml中配置了Jersey servlet製作春季知道新澤西州過濾

<servlet> 
    <servlet-name>Jersey Spring Web Application</servlet-name> 
    <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class> 
    <init-param> 
     <param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name> 
     <param-value>com.MyFilter</param-value> 
    </init-param> 
</servlet> 

過濾器類然後嘗試注入Manager bean。爲了讓Spring知道Filter bean,我已經在我的applicationContext.xml中定義了bean並將其包含在內。

@Component 
public class MyFilter implements ContainerRequestFilter { 

@Autowired 
private Manager manager; 

我試圖通過強制Spring使用代理服務器進行過濾豆可見生成的類然而,這並不工作

<mvc:annotation-driven /> 

<aop:aspect-autoproxy />  

<bean id="filter" class="com.MyFilter"> 
    <property name="manager" ref="Manager" /> 
</bean> 

如何我可以編輯現有的代碼,以使過濾器的任何建議見春豆?

回答

2

這是什麼,是很常見的春季安全應用。你應該使用DelegatingFilterProxy這個。

您將通過<filter>標籤這個過濾器添加到您的web.xml,然後您將其配置爲您的應用程序容器中的bean。然後,您可以使用它來委派到您的應用程序上下文中的Spring配置過濾器。

我不熟悉如何新澤西州的SpringServlet的工作,但是這是我怎麼會委託給一個Spring配置的過濾器。

7

由於您使用的新澤西州的春天的Servlet,Spring的依賴可以使用註釋@InjectParam

//@Component -> This is not required. 
public class MyFilter implements ContainerRequestFilter { 

@InjectParam 
private Manager manager; 

我覺得這是一個使用新澤西州和春天一起的慣用方式注入到過濾器。

+0

的'@ InjectParam'對我的作品,但如果我從web.xml中刪除''澤西不會加載該過濾器。 – 2013-12-29 20:31:58

+0

謝謝。我已經更新了答案。 – 2014-01-02 13:57:51

+0

當我添加'@ InjectParam'時,我得到一個SEVERE:缺少依賴關係錯誤;使用'@ Inject'作品從Spring注入資源類(但@ @ Inject不能在容器過濾器中拾取)。有沒有我失蹤的一些步驟? – 2014-09-15 13:18:51