2012-03-21 12 views
2

私は春のセキュリティを持つWebアプリケーションを持っており、デフォルトではすべてのページに承認が必要です。私のシナリオでは、管理者はある時点でいくつかのページのセキュリティを無効にしたり、完全に無効にすることを決めることができます。どのようにこれを達成するのが最善でしょうか?私はFilterChainProxyの変更について考えていましたが、どのように正確に(getFilterChains()が変更不可能なリストを返すか)私には明らかではありませんか?プログラムでスプリングセキュリティを無効にする

+0

まず、ログインページ(通常はそうではありません)を含め、*すべて*が保護されているように、あなたの設定は珍しいようです。 管理者がページのセキュリティを無効にできるシナリオについて詳しく説明できますか?同時に珍しくて面白いようです。 –

+0

これはhttp-basicを使用しているため、デフォルトのブラウザ認証ダイアログが使用されます。アプリケーションは一種のdb search/explore/serverであり、すべてがデフォルトで保護されているため、管理者は公開する必要があるかもしれません(例えば、アプリケーションと通信する必要があるが認証をサポートしないサードパーティのアプリケーションのため) 。 – kpentchev

答えて

3

サブクラスDelgatingFilterProxyを見てくださいと、デリゲートを呼び出すするか否かのフラグをチェックします。

DelegatingFilterProxyの代わりにweb.xmlにspringSecurityFilterChain(名前空間の設定を使用していると仮定)を使用してください。例えば:あなたのDelegatingFilterProxyで

<filter> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <filter-class>com.foo.spring.MyDelegatingFilterProxy</filter-class> 
</filter> 

あなたが委任またはべきでないかどうかを確認するために(例えば、システムプロパティ)フラグをチェック。

class MyDelegatingFilterProxy extends DelegatingFilterProxy { 

    override def doFilter(request: ServletRequest, response: ServletResponse, chain: FilterChain) { 

    if (System.getProperty("skipSpringSecurity" != null) { 
     // Ignore the DelegatingProxyFilter delegate 
     chain.doFilter(request, response) 
    } else { 
     // Call the delegate 
     super.doFilter(request, response, chain) 
    } 
    } 
} 

あなたは<security:intercept-url pattern="/**" access="ROLE_USER" />のようなブランケットワイルドカードを使用するために、同じ技術を使用して、(静的ファイル、などのために)/下のパスのいくつかのセットのために春のセキュリティフィルタを呼び出すスキップすることができます。

+0

ありがとう、これは私が探していたもので、うまくいきます! – kpentchev

0

スプリングセキュリティはどのように設定されていますか?あなたの条件を検証するカスタムpermissionEvaluatorを追加することができますか?

spring-security writing a custom PermissionEvaluator - how to inject a DAO service?

+0

私はいくつかの特定の有権者とAuthenticationProviderを持っていますが、それ以外の場合は、デフォルトのWebアプリケーションの設定 '<セキュリティ使用します。http自動設定 \t \t認証マネージャ-REF =「authenticationManager」=「真」 \t \tアクセス意思決定マネージャを-ref = "repositoryAccessDecisionManager" \t \tアクセス拒否-ページ=> "/についてaccessdenied" \t \t \t \t <セキュリティ:インターセプト-URLパターン= "/ **" アクセス= "ROLE_USER" /> \t \t <セキュリティ:http-basic /> \t ' – kpentchev

関連する問題