7

アプリケーションには、各ロールが次の構文に従うロール規則メカニズムがあります。

APP_DEPARTMENT1_USER
APP_DEPARTMENT1_AUDITOR
APP_DEPARTMENT1_WHATEVER
APP_DEPARTMENT2_...

特定のサフィックスに一致するすべてのロールに、Web アプリケーションのセクションへのアクセスを許可できるように、Spring セキュリティを構成したいと考えています。やみくもに試してみましたが<intercept-url pattern="/secure/audit/**" access="APP_*_AUDITOR,APP_ADMINISTRATOR" />(APP_ADMINISTRATORデフォルトの管理者ロールはどこにありますか)、うまくいきませんでした。管理者としてログインするとページにアクセスできますが、プロファイルでログインしようとするとAPP_DEPARTMENT1_AUDITORページにアクセスできません。

ワイルドカード式はサポートされていないと思います。また、Spring EL 式が役立つとは思いません (または、十分に習得していないだけです)。

<intercept-url>タグ内で Spring Security のロール パターンを構成する方法はありますか?

4

2 に答える 2

6

1 つの解決策は、ロール階層に対する Spring Security の組み込みサポートを使用しAPP_AUDITOR、個々の部門の監査ロールを「含む」一般的なロールを指定することです。

既存の実装では単純な等価テストしか実行されないため、別の方法として、パターンを操作できる独自の改良されたロール ボーターを作成することもできます。この既存のクラスに基づいて、代わりにパターン マッチングを簡単に実行できるはずです。それが整ったら、次の方法でカスタムボーターをセキュリティインフラストラクチャに接続できます。

<http access-decision-manager-ref="myAccessDecisionManager">
  ...
</http>

<bean id="myAccessDecisionManager"
    class="org.springframework.security.access.vote.AffirmativeBased">
  <constructor-arg name="decisionVoters">
      <list>
        <bean id="patternBasedRoleVoter" 
            class="com.example.PatternBasedRoleVoter"/>
        <bean id="authenticatedVoter"
            class="org.springframework.security.access.vote.AuthenticatedVoter"/>            
      </list>
  </constructor-arg>
</bean>
于 2013-07-29T14:41:23.677 に答える
3

オプションとして、Web セキュリティ表現を使用するように conf を切り替えてから、正規表現入力を処理できるカスタム Web セキュリティ表現を導入できます。セキュリティ式への切り替え:

<http use-expressions="true">
    <intercept-url pattern="/secure/audit/**" access="
        hasRole('APP_DEPARTMENT1_AUDITOR') 
        and hasRole('APP_DEPARTMENT2_AUDITOR') 
        or hasRole('APP_ADMINISTRATOR')" />

ここで説明されているように、カスタムhasRegexRole('regex_input')Web セキュリティ表現を紹介します。

<http use-expressions="true">
    <intercept-url pattern="/secure/audit/**" access="
        hasRegexRole('APP_*_AUDITOR') 
        or hasRole('APP_ADMINISTRATOR')" />

メソッドのソース コードを使用して、org.springframework.security.access.expression.SecurityExpressionRoot.hasRole(String role)権限を取得する方法を確認できます。次に、正規表現パターン マッチングを適用する必要があります。それだけです。お役に立てれば。

于 2013-07-29T16:07:56.920 に答える