1

filterChainProxy についてはよくわかりません。アプリケーションでスプリング セキュリティが正常に動作していますが、プロパティ ファイルから ConfigAttributes をロードする必要があります。

FilterInvocationSecurityMetadataSource を実装するクラスを作成する必要があることはわかっています..その後、作成しました..

私がこれについて読んでいたとき..ドキュメントで、アプリケーションコンテキストxmlでfilterchaeinProxyを宣言する必要があるのを見ました..このように..

<bean id="filterChainProxy" class="org.springframework.security.web.FilterChainProxy">
  <constructor-arg>
    <list>
       <sec:filter-chain pattern="/**" filters="
           securityContextPersistenceFilterWithASCTrue,
           formLoginFilter,
           exceptionTranslationFilter,
           filterSecurityInterceptor" />
    </list>
  </constructor-arg>
</bean>

カスタム フィルターを 1 つだけ使用するには、これらすべてのフィルターを宣言する必要がありますか?

プロパティファイルからURLとそれぞれの役割を取得したい..

4

1 に答える 1

1

ドキュメンテーション セクション「Adding in Your Own Filters」からの引用:

<http>要素自体を使用して作成されたフィルターを置き換えることはできないことに注意してください- SecurityContextPersistenceFilterExceptionTranslationFilterまたはFilterSecurityInterceptor.

このため、これら 3 つのフィルターのいずれかをカスタマイズする場合は、チェーン全体を自分で定義する必要があります。


おそらく手遅れですが、この質問のフォローアップとして、次のあまり美しくないハックを適用してFilterSecurityInterceptor、フィルターチェーン全体を手動で作成する必要がないように、名前空間構成によって作成されたをカスタマイズできます。

コンストラクターで受け取った にyourCustomSecurityMetadataSourceを設定する以外は何もしないクラスを作成します。FilterSecurityInterceptor

public class FilterSecurityInterceptorInitializer {
    @Autowired
    public FilterSecurityInterceptorInitializer(
            FilterSecurityInterceptor filterSecurityInterceptor,
            CustomSecurityMetadataSource securityMetadataSource) {
        filterSecurityInterceptor
            .setSecurityMetadataSource(securityMetadataSource);
    }
}

次に、この初期化クラスをコンテキストに含めます。

<bean class="FilterSecurityInterceptorInitializer" autowire="constructor"/>
<bean class="CustomSecurityMetadataSource"/>
于 2013-02-27T15:23:52.217 に答える