0

春のセキュリティ MVC アプリケーションがあります。いくつかの JSP ファイルには、次のようなコードがあります。

<sec:authorize access="hasAnyRole('ROLE_FOO', 'ROLE_BAR')">
  <!--do something here-->  
</sec:authorize>

ROLE_FOOロール名が異なるため、アプリを本番環境にデプロイするときにコードを変更する (別のものに変更する) 必要があります。<sec:authorize>そのため、プロパティ ファイルでこれらのロール名を構成し、タグ内でそれらを選択する方法があるかどうか疑問に思っていました。

したがって、コードは次のようになります。

プロパティ ファイル:

Admin_Roles = ROLE_FOO ROLE_BAR

とJSP

<sec:authorize access="hasAnyRole(<get roles from Admin_Roles in prop file>)">
  <!--do something here-->  
</sec:authorize>

ところで、私は認証に Active Directory を使用しているため、これらのロールはテスト用と本番用に Active Directory で事前に構成されています。

4

2 に答える 2

1

可変数のロールに対してこれをどのように行うかわかりませんが、固定数に対してこのようなことを試しましたか?

JSP:

<sec:authorize access="hasAnyRole('${adminRole1}', '${adminRole2}')">
  <!--do something here-->  
</sec:authorize>

コントローラ:

@Value("#{myprops.admin_role_1}"}
private String adminRole1;
@Value("#{myprops.admin_role_2}"}
private String adminRole2;
...
@RequestMapping("/hello")
public String hello(final Model model) {
  model.addAttribute("adminRole1", adminRole1);
  model.addAttribute("adminRole2", adminRole2);
  ...
} 

および構成 XML:

<bean id="myprops"
  class="org.springframework.beans.factory.config.PropertiesFactoryBean">
  <property name="locations">
    <list>
      <!-- External property files -->
      <value>file:${somepathvar}/adminroles.properties</value>
    </list>
  </property>
</bean>
于 2013-02-27T03:40:27.213 に答える
1

それが最も簡単な方法かどうかはわかりません。しかし、あなたは自分の表現を書くことができます。

このリンクは非常に役立つはずです。リンク

バージョンごとに多少の違いがありますので。DefaultWebSecurityExpressionHandlerオーバーライド時に何かを見逃さないように、 のソース コードを確認することをお勧めします。createSecurityExpressionRoot

于 2013-02-27T02:36:49.223 に答える