1. 程式人生 > 實用技巧 >41.4 Method Security方法安全性

41.4 Method Security方法安全性

41.4.1<global-method-security>

這個元素是為Spring Security beans上的安全方法新增支援的主要手段。可以通過使用註釋(在介面或類級別定義)或者通過使用AspectJ語法將一組切入點定義為子元素來保護方法。

<global-method-security> Attributes

  • access-decision-manager-ref方法安全性使用與web安全性相同的AccessDecisionManager配置,但這可以使用此屬性覆蓋。預設情況下,基於確認AffirmativeBased的實現用於角色投票者RoleVoter和授權投票者AuthenticatedVoter。
  • authentication-manager-ref應該用於方法安全性的身份驗證管理器的引用。
  • jsr250-annotations指定是否要使用JSR-250樣式屬性(例如“角色化”)。這將需要類路徑上的javax.annotation.security類。將此設定為true還會將一個Jsr 250選民新增到訪問決策管理器中,因此如果您使用自定義實現並希望使用這些註釋,您需要確保這樣做。
  • metadata-source-ref可以提供一個外部MethodSecurityMetadataSource例項,該例項將優先於其他源(如預設註釋)。
  • mode
    該屬性可以設定為“aspectj”,以指定應該使用AspectJ而不是預設的Spring AOP。安全方法必須與spring-security-aspects模組中的註釋安全屬性相結合。

值得注意的是,AspectJ遵循Java的規則,即介面上的註釋是不可繼承的。這意味著在介面上定義安全註釋的方法將不會受到保護。相反,在使用AspectJ時,必須將安全性註釋放在類上。

  • order允許為方法安全攔截器設定建議“順序”。
  • pre-post-annotations指定是否應該為此應用程式上下文啟用Spring Security的呼叫前和呼叫後註釋(@ PreFilter,@PreAuthorize,@PostFilter,@PostAuthorize)。預設為“禁用”。
  • proxy-target-class 如果為真,將使用基於類的代理,而不是基於介面的代理。
  • run-as-manager-ref對可選執行管理器實現的引用,該實現將由已配置的MethodSecurityInterceptor使用
  • secured-annotations指定是否應該為此應用程式上下文啟用Spring Security的@Secured註釋。預設為“disabled”。

Child Elements of <global-method-security>

41.4.2<after-invocation-provider>

此元素可用於修飾由<global-method-security>名稱空間維護的安全性攔截器使用的AfterInvocationProvider。您可以在global-method-security元素中定義零個或多個這樣的元素,每個元素都有一個引用屬性指向您的應用程式上下文中的一個AfterInvocationProvider bean例項。

<after-invocation-provider> Attributes

  • ref定義對實現AfterInvocationProvider的Spring bean的引用。

41.4.3<pre-post-annotation-handling>

允許完全替換用於處理Spring Security的呼叫前和呼叫後註釋的預設基於表示式的機制(@ PreFilter、@PreAuthorize、@PostFilter、@PostAuthorize)。僅在啟用這些註釋時適用。

Child Elements of <pre-post-annotation-handling>

41.4.4<invocation-attribute-factory>

定義前置呼叫屬性工廠例項,該例項用於從帶註釋的方法生成呼叫前和呼叫後元資料。

<invocation-attribute-factory> Attributes

  • ref定義對spring bean標識的引用

41.4.5<post-invocation-advice>

使用引用作為<pre-post-annotation-handling>元素的位置授權PostInvocationAuthorizationAdvice建議來自定義位置授權提供程式PostInvocationAdviceProvider

<post-invocation-advice> Attributes

  • ref定義對spring bean標識的引用

41.4.6<pre-invocation-advice>

使用引用作為<pre-post-annotation-handling>元素的前置位置授權建議投票者PreInvocationAuthorizationAdviceVoter,自定義前置位置授權建議投票者PreInvocationAuthorizationAdviceVoter。

<pre-invocation-advice> Attributes

  • ref定義對spring bean標識的引用

41.4.7Securing Methods using

您可以使用<protect-pointcut>元素跨服務層中的整套方法和介面定義交叉安全約束,而不是使用@Secured註釋在單個方法或類的基礎上定義安全屬性。您可以在名稱空間介紹中找到一個示例。

<protect-pointcut> Attributes

  • access訪問適用於所有匹配切入點的方法的配置屬性列表,例如“角色甲,角色乙”
  • expressionAspectJ表示式,包括“執行”關鍵字。例如,“執行(int com . foo . TargetObject . CountLength(String))”(不帶引號)。

41.4.8<intercept-methods>

可以在bean定義中使用,向bean新增安全攔截器,併為bean的方法設定訪問配置屬性

<intercept-methods> Attributes

  • access-decision-manager-ref建立的方法安全攔截器使用的可選訪問決策管理器AccessDecisionManagerbean標識。

Child Elements of <intercept-methods>

41.4.9<method-security-metadata-source>

建立MethodSecurityMetadataSource 例項

<method-security-metadata-source> Attributes

  • id一個bean識別符號,用於引用上下文中其他地方的bean。
  • use-expressions允許在<intercept-url >元素的“access”屬性中使用表示式,而不是傳統的配置屬性列表。預設為“false”。如果啟用,每個屬性應該包含一個布林表示式。如果表示式計算結果為“true”,將授予訪問許可權。

Child Elements of <method-security-metadata-source>

41.4.10<protect>

定義受保護的方法和應用於該方法的訪問控制配置屬性。我們強烈建議您不要將“保護”宣告與任何提供“global-method-security”的服務混在一起。

<protect> Attributes

  • access訪問適用於該方法的訪問配置屬性列表,例如“角色A,角色B”。
  • method方法名