3

通常、いくつかのインターセプト URL パターンを定義して、Spring セキュリティでページへのアクセスを構成します

<http use-expressions="true">
    <intercept-url pattern="/**/secure/**" access="hasRole('ROLE_SECURE_USER')" />
    ...
</http>

現在、事前に知られていない URL を持つページがあります。しかし、特定のページを保護する必要があるかどうかを決定するコードを書くことができます。つまり、ページを保護する必要がある場合に true を返すサービスを提供できます。したがって、私たちがやりたいことは次のようなものです。

<http use-expressions="true">
    <intercept decide="@service.mustProtect()" access="hasRole('ROLE_SECURE_USER')" />
    ...
</http>

これはSpringでどのように達成できますか? カスタム フィルターを作成する必要がありますか? このようなフィルターをどのように実装しますか?

4

2 に答える 2

0

タグが行うことは、s が s にマップされて<intercept-url>いるリポジトリ ( と呼ばれるSecurityMetadataSource) にデータを入力するだけです。s は属性に基づいて生成されますが、 s は属性で指定された文字列を保持しているだけです。RequestMatcherConfigAttributeRequestMatcherpatternConfigAttributeaccess

受信リクエストがフィルターにヒットするFilterSecurityInterceptorと、これらのマッピングのリストを繰り返し処理して、 がRequestMatcher一致を示す最初のエントリを見つけ、適用する必要があるアクセス制限の種類を決定します (マップされた で説明されていますConfigAttribute)。

ここで、このマップに独自の実装を配置できればRequestMatcher、要件は基本的に解決されます。pattern問題は、名前空間の構成がこのユースケースに対応しておらず、属性を asAntPathRequestMatcherまたは as としてしか解釈できないことRegexRequestMatcherです。

これは、Bean レベルでセキュリティ インフラストラクチャを構成する必要があることを意味します。これは、<http>要素が独自のものを作成し、それFilterSecurityInterceptorを置き換えることができないためです。

この記事では、この種の手動のセキュリティ構成を作成する方法について非常に役立つ情報を見つけることができます。

于 2013-08-21T10:53:09.917 に答える