Spring Securityの要素からプログラム的にアクセスする方法要素
-
27-10-2019 - |
質問
インターセプト-URL宣言の内容にプログラム的にアクセスするにはどうすればよいですか(から http://www.springframework.org/schema/security スキーマ)?例えば、
<http auto-config='true'>
<intercept-url pattern="/static/**" filters="none" access="IS_AUTHENTICATED_ANONYMOUSLY" />
<intercept-url pattern="/**" access="ROLE_USER" />
...
</http>
Spring Securityロールマッピングは、特定のページへのアクセスを制限するために使用されます。同じ役割マッピング情報を抽出したい( パターン と 受け入れる 属性)は、各役割にアクセスできるHTML-Menuのページのみを表示できるようにすることができます。
私は見ました HttpConfigurationBuilder
, 、しかし、それは保護されたパッケージであり、それほど多くの情報を提供していないようです。私も試しました:
FilterSecurityInterceptor interceptor = appContext.getBean(FilterSecurityInterceptor.class);
if (interceptor != null) {
for (ConfigAttribute attr : interceptor.getSecurityMetadataSource().getAllConfigAttributes()) {
// Extract the attributes ...
attr.getAttribute();
}
}
しかし、私はURLパターンではなく、役割にのみアクセスすることができました。
解決
名前空間サポートを使用して宣言された構成は、アプリケーションコンテキストがロードされた後、同じ「形式」には存在しません。
ロールマッピング情報を保存する場合は、構成の解析中にアクセスし、将来の使用に必要なデータを保存する必要があります。これをサブクラス化することでこれを行うことができます org.springframework.security.config.http.HttpSecurityBeanDefinitionParser
, 、あなたが望むデータを読み、委任します super
.
見る Spring Security 3-付録D.拡張可能なXMLオーサリング カスタムの使用のため BeanDefinitionParser
実装。
他のヒント
おそらく、あなたは確認することができます getFilterChainMap
()の方法 FilterChainProxy
クラスは関連情報を提供します。