SSH構造のWebアプリケーションでは、spring管理のインスタンスをカスタムフィルタFilterで取得する方法


最近私はプロジェクトの中で1つの问题に出会って、1つのフィルターFilterをカスタマイズして、私はフィルターの中でサービスを取得して、それによっていくつかの业务の操作を行いたいと思って、しかし、私はどうしてもspring管理のサービスを得ることができなくて、それからネット上で长い间探して、ついにこの问题を解决して、この间违いは私がwebにいます.xml内の構成はサーブレットフィルタに従って構成されており、フィルタの初期化時にspringのインスタンスがまだ初期化されていないためspringのインスタンスを得ることができず、後にネット上の案を参考にDelegatingFilterProxyを用いてこの問題を解決した.
DelegatingFilterProxyはservlet filterのエージェントです.このクラスの利点は主にSpringコンテナでservlet filterのライフサイクルを管理することです.また、filterにSpringコンテナのインスタンスが必要な場合はspringで直接入力できます.また、いくつかのプロファイルを読み込むという便利な操作はSpringで構成できます.
DelegatingFilterProxyの使い方、
まずweb.xmlでの構成:
 
<filter>
    <filter-name>urlFilter</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
    <filter-name>urlFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping> 

 
次にSpringのプロファイルで、特定のFilterクラスのインスタンスを構成します.
 
<bean id="urlFilter" class="com.nxt.count.filter.UrlFilter">
	<property name="visitLogService" ref="visitLogService"/>
</bean>

注意:Springで構成されているbeanのnameはwebとします.xmlのは一致する必要があります
     
またはDelegatingFilterProxyのfilter構成で初期パラメータ:targetBeanNameを構成し、Spring構成のbeannameに対応します. 
 
Filterの元のinit、destroyメソッドの呼び出しを保持する場合は、初期化パラメータtargetFilterLifecycleをtrueに設定する必要があります.このパラメータはfalseがデフォルトです.