2

2 つのサーブレットと、各サーブレットに関連付けられた複数のマッピングを持つ Web アプリケーションがあります。

web.xml:

<servlet-mapping>
    <servlet-name>cheese</servlet-name>
    <url-pattern>/edam/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>cheese</servlet-name>
    <url-pattern>/cheddar/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>dog</servlet-name>
    <url-pattern>/poodle/*</url-pattern>
</servlet-mapping>
...

サーブレットごとに異なるセキュリティ構成で、Spring Security をこの Web アプリケーションに適用したいと思います。これは、サーブレットの認証要件が異なるためです。そのため、2 つのフィルター マッピングのみが必要です。

<filter-mapping>
    <filter-name>springSecurityFilterChainCheese</filter-name>
    <servlet-name>cheese</servlet-name>
</filter-mapping>
<filter-mapping>
    <filter-name>springSecurityFilterChainDog</filter-name>
    <servlet-name>dog</servlet-name>
</filter-mapping>

Spring Security 3.1 を使用すると、複数の<http>要素を定義できます。これは良い方法のようです。<http>ただし、各要素の Bean 名を指定する方法や、要素をサーブレットにマッピングするその他の方法がわかりません。

で属性を指定pattern<http>できることはわかっていますが、DRY ではない Spring Security 構成でサーブレットから URL へのマッピングを繰り返す必要があります。

<http>このように要素を特定のサーブレットにマップするにはどうすればよいですか? それとも、<http>要素を展開してすべての Spring Security Bean を自分で定義する必要がありますか?

4

2 に答える 2

1

あなたの例からはわかりませんが、本当に2つのフィルターが必要ですか?

http://static.springsource.org/spring-security/site/docs/3.1.x/reference/springsecurity-single.html#ns-minimalを読んだことがありますか?それはあなたに正しい方向へのプッシュを与えるかもしれません。

1つの要素に複数の要素を含めることができます。それはあなたのために働きますか?私はあなたが求めていることをする他の方法を知りません。最も具体的なルールを一番上に置くことを忘れないでください。それが評価される順序です。

完全にDRYソリューションを使用できない場合もありますが、少なくともコードではありません。本当に心配な場合は、Antなどのメカニズムを使用してサーブレット名とパターン要素を入力します。

于 2012-06-21T21:32:25.887 に答える
1

Spring Security のソース コードを見ると、要素にorを指定することでこれ可能であるように見えますが、Spring Security XML スキーマはこれを防ぎます! それに応じてhttps://jira.springsource.org/browse/SEC-1978を上げました。idname<http>

于 2012-06-25T13:56:58.557 に答える