2009-05-04 20 views
1

SpringSecurityFilterサブクラスのdoFilterHttpが各リクエストで2回呼び出される理由についてのアイデアはありますか?私は本当にどこから探し始めるべきかわかりません。少しぼんやりした感じ。(Spring Security)サーブレットフィルタが2回呼び出されるのはなぜですか?

私は休暇中の同僚のコードをリバースエンジニアリングしています。 web.xmlの

::春のsecurity.xmlで

<filter> 
    <filter-name>userSecurityFilter</filter-name> 
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>userSecurityFilter</filter-name> 
    <url-pattern>*.do</url-pattern> 
</filter-mapping> 
<filter-mapping> 
<filter-name>userSecurityFilter</filter-name> 
<url-pattern>/json/*</url-pattern> 

<!-- Create the filter chains for developers, users and services --> 
<bean id="userSecurityFilter" class="org.springframework.security.util.FilterChainProxy"> 
    <security:filter-chain-map path-type="ant"> 
    <security:filter-chain pattern="/**/json/*"  filters="AuthFilter,anonymousProcessingFilter,exceptionTranslationFilter,filterInvocationInterceptor"/> 
    <security:filter-chain pattern="/**/*.do"  filters="AuthFilter,anonymousProcessingFilter,exceptionTranslationFilter,filterInvocationInterceptor"/> 
    <security:filter-chain pattern="/**"   filters="anonymousProcessingFilter,logoutFilter,exceptionTranslationFilter,filterInvocationInterceptor"/> 
    </security:filter-chain-map> 
</bean> 

それがどのように見える、私はそれを把握することができます限りでは、ここに関連する構成です/ **/json/* URLはフィルタチェーンを2回適用しますが、他のフィルタチェーンは1回だけ取得します。私は戻って、ちょうど私が言ったことが本当に真実であることを確認するつもりです。

+0

更新 - それはすべてのURLで起こっていません。 URL Aで一度呼び出されます。 URL Bでは、2回呼び出されます。 – morgancodes

答えて

1

のweb.xmlに見て、そのサーブレット・コンテナは、いくつかのディスパッチャを処理している、ここに行くには、それがかもしれないくらい:あなたのweb.xmlからのfilter-mappingを投稿することができます

<filter-mapping> 
    <filter-name>securityFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
    <!-- the following is optional, but some containers give the wrong default --> 
    <dispatcher>REQUEST</dispatcher> 
</filter-mapping> 

を?

+0

gid、応答に感謝します。フィルターのマッピングは簡単ではありません。私のフィルタは、(実際に私の同僚の - 彼は:)それゆえ、休暇中に私の失われたらしです)おそらく\t \t \t userSecurityFilter \t \tによって開始、いくつかの春の魔法によって追加されているようです org.springframework.web.filter.DelegatingFilterProxy \t morgancodes

+0

私はいくつかのより良い質問があるときこれをもっと見て、戻ってきます。 – morgancodes

0

springセキュリティフィルタは、従来のサーブレットフィルタのようにweb.xmlに設定されていません。代わりに、application-context.xml(またはweb.xmlでインポートした.xml構成ファイル)のどこかに構成されます。このようなタグを持つBeanの

ルック:

<custom-filter position="LAST" /> 

Beanにそのタグを追加することは、あなたの春のセキュリティフィルター・チェーンに追加します。私の推測では、チェーンに適切に追加され、上に示したようにサーブレットフィルタとして追加されています。したがって、実際には2回設定されています。

2

[OK]を修正しました。

/json/thatの末尾に ".do"というURLがあるため、これらのURLは2回適用されたSpring Securityのすべてのものを取得していました。回答ありがとう!たとえそれが愚かな問題であったとしても、私は自分自身でそれに答えました。とても有難い。

関連する問題