2

SpringSecurityFilter サブクラスの doFilterHttp が各リクエストで 2 回呼び出される理由についてのアイデアはありますか? どこから探し始めたらいいのかよくわかりません。少し途方に暮れている感じ。

休暇中の同僚のコードをリバース エンジニアリングしています。私が理解できる限り、関連する構成は次のとおりです。

web.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>

spring-security.xml で:

 <!-- 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 回適用されているようですが、他の URL では 1 回しか適用されていません。今言ったことが本当に正しいかどうか、戻って確認します。

4

3 に答える 3

2

わかりました、修正したと思います。

<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>

/json/ の下に「.do」で終わる URL があるため、これらの URL にはすべての Spring Security が 2 回適用されていました。回答ありがとうございます。それはばかげた問題であり、私は自分で答えましたが、応答を調べて答えにたどり着きました。とても有難い。

于 2009-05-07T20:02:35.147 に答える
1

ここではあまり説明しませんが、サーブレット コンテナが複数のディスパッチャを処理している可能性があります。web.xml で次を確認してください。

<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>

web.xml からフィルター マッピングを投稿できますか?

于 2009-05-04T20:20:02.103 に答える
0

Spring Security フィルターは、従来のサーブレット フィルターのように web.xml で構成されません。代わりに、application-context.xml (または web.xml にインポートする .xml 構成ファイル) のどこかに構成されます。

次のようなタグが付いた Bean を探します。

<custom-filter position="LAST" />

そのタグを Bean に追加すると、それが Spring Security フィルター チェーンに追加されます。私の推測では、チェーンに適切に追加され、上記のようにサーブレット フィルターとしても追加されています。したがって、実際には 2 回構成されます。

于 2009-05-05T22:16:27.200 に答える