3

( http://www.springframework.org/schema/securityスキーマから)intercept-url宣言の内容にプログラムでアクセスするにはどうすればよいですか?例えば、

<http auto-config='true'>
    <intercept-url pattern="/static/**" filters="none" access="IS_AUTHENTICATED_ANONYMOUSLY" />
    <intercept-url pattern="/**" access="ROLE_USER" />
    ...
</http>

Springセキュリティロールマッピングは、特定のページへのアクセスを制限するために使用されます。同じロールマッピング情報(パターン受け入れ属性)を抽出して、各ロールが表示できるhtmlメニューのページのみを表示できるようにします。

私はを見てきましたが、HttpConfigurationBuilderそれはパッケージで保護されており、それほど多くの情報を提供していないようです。私も試しました:

  FilterSecurityInterceptor interceptor = appContext.getBean(FilterSecurityInterceptor.class);
  if (interceptor != null) {
      for (ConfigAttribute attr : interceptor.getSecurityMetadataSource().getAllConfigAttributes()) {
          // Extract the attributes ... 
          attr.getAttribute();
      }
  }

しかし、私はURLパターンではなく、ロールにアクセスすることしかできませんでした。

4

2 に答える 2

2

名前空間サポートを使用して宣言された構成は、アプリケーションコンテキストがロードされた後、同じ「形式」で存在しません。

ロールマッピング情報を保持する場合は、構成の解析中にロールマッピング情報にアクセスし、将来の使用に備えて必要なデータを保存する必要があります。これを行うには、サブクラス化しorg.springframework.security.config.http.HttpSecurityBeanDefinitionParser、必要なデータを読み取り、に委任しsuperます。

Spring Security 3-付録Dを参照してください。カスタム実装の使用法については、拡張可能なXMLオーサリング。BeanDefinitionParser

于 2011-02-23T08:13:42.297 に答える
0

おそらく、クラスgetFilterChainMapの()メソッドが関連情報を提供するかどうかを確認できます。FilterChainProxy

于 2011-01-28T18:20:03.933 に答える