方法安全

<method-security>

此元素是將方法安全支援新增到 Spring Security bean 的主要方式。可以透過使用註解(在介面或類級別定義)或定義一組切入點來保護方法。

<method-security> 屬性

  • pre-post-enabled 啟用此應用上下文的 Spring Security 前置和後置呼叫註解(@PreFilter、@PreAuthorize、@PostFilter、@PostAuthorize)。預設為 "true"。

  • secured-enabled 啟用此應用上下文的 Spring Security @Secured 註解。預設為 "false"。

  • jsr250-enabled 啟用此應用上下文的 JSR-250 授權註解(@RolesAllowed、@PermitAll、@DenyAll)。預設為 "false"。

  • mode 如果設定為 "aspectj",則使用 AspectJ 攔截方法呼叫。

  • proxy-target-class 如果為 true,將使用基於類的代理而不是基於介面的代理。預設為 "false"。

  • security-context-holder-strategy-ref 指定在檢索 SecurityContext 時使用的 SecurityContextHolderStrategy。預設為 SecurityContextHolder.getContextHolderStrategy() 返回的值。

  • observation-registry-ref 用於 FilterChain 及相關元件的 ObservationRegistry 引用

<method-security> 的子元素

<global-method-security>

此元素是將方法安全支援新增到 Spring Security bean 的主要方式。可以透過使用註解(在介面或類級別定義)或使用 AspectJ 語法定義一組切入點作為子元素來保護方法。

<global-method-security> 屬性

  • access-decision-manager-ref 方法安全使用與 Web 安全相同的 AccessDecisionManager 配置,但可以使用此屬性覆蓋。預設使用 AffirmativeBased 實現,包含 RoleVoter 和 AuthenticatedVoter。

  • authentication-manager-ref 方法安全應使用的 AuthenticationManager 引用。

  • jsr250-annotations 指定是否使用 JSR-250 風格的屬性(例如 "RolesAllowed")。這需要在 classpath 中包含 javax.annotation.security 類。將其設定為 true 還會將 Jsr250Voter 新增到 AccessDecisionManager 中,因此如果使用自定義實現並希望使用這些註解,需要確保執行此操作。

  • metadata-source-ref 可以提供一個外部的 MethodSecurityMetadataSource 例項,它將優先於其他來源(例如預設註解)。

  • mode 此屬性可以設定為 "aspectj" 以指定應使用 AspectJ 而不是預設的 Spring AOP。受保護的方法必須使用 spring-security-aspects 模組中的 AnnotationSecurityAspect 進行織入。

重要的是要注意,AspectJ 遵循 Java 的規則,即介面上的註解不會被繼承。這意味著在介面上定義安全註解的方法將不會被保護。相反,在使用 AspectJ 時,必須將安全註解放在類上。

  • order 允許為方法安全攔截器設定通知的 "order"。

  • pre-post-annotations 指定是否應為此應用上下文啟用 Spring Security 前置和後置呼叫註解(@PreFilter、@PreAuthorize、@PostFilter、@PostAuthorize)。預設為 "disabled"。

  • proxy-target-class 如果為 true,將使用基於類的代理而不是基於介面的代理。

  • run-as-manager-ref 配置的 MethodSecurityInterceptor 將使用的可選 RunAsManager 實現的引用

  • secured-annotations 指定是否應為此應用上下文啟用 Spring Security 的 @Secured 註解。預設為 "disabled"。

<after-invocation-provider>

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

<after-invocation-provider> 的父元素

<after-invocation-provider> 屬性

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

<pre-post-annotation-handling>

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

<pre-post-annotation-handling> 的父元素

<pre-post-annotation-handling> 的子元素

<invocation-attribute-factory>

定義用於從帶註解的方法生成前置和後置呼叫元資料的 PrePostInvocationAttributeFactory 例項。

<invocation-attribute-factory> 的父元素

<invocation-attribute-factory> 屬性

  • ref 定義對 Spring bean ID 的引用。

<post-invocation-advice>

使用 ref 作為 <pre-post-annotation-handling> 元素的 PostInvocationAuthorizationAdvice 來自定義 PostInvocationAdviceProvider

<post-invocation-advice> 的父元素

<post-invocation-advice> 屬性

  • ref 定義對 Spring bean ID 的引用。

<pre-invocation-advice>

使用 ref 作為 <pre-post-annotation-handling> 元素的 PreInvocationAuthorizationAdviceVoter 來自定義 PreInvocationAuthorizationAdviceVoter

<pre-invocation-advice> 的父元素

<pre-invocation-advice> 屬性

  • ref 定義對 Spring bean ID 的引用。

使用以下方式保護方法

<protect-pointcut> 您可以使用 <protect-pointcut> 元素在服務層中為整個方法和介面集定義橫切安全約束,而不是使用 @Secured 註解在單個方法或類上定義安全屬性。您可以在 名稱空間介紹 中找到示例。

<protect-pointcut> 的父元素

<protect-pointcut> 屬性

  • access 應用於匹配切入點的所有方法的訪問配置屬性列表,例如 "ROLE_A,ROLE_B"

  • expression 一個 AspectJ 表示式,包括 execution 關鍵字。例如,execution(int com.foo.TargetObject.countLength(String))

<intercept-methods>

可在 bean 定義內部使用,為 bean 新增安全攔截器併為其方法設定訪問配置屬性

<intercept-methods> 屬性

  • use-authorization-manager 使用 AuthorizationManager API 代替 AccessDecisionManager(預設為 true)

  • authorization-manager-ref 可選的 AuthorizationManager bean ID,用於代替預設值(覆蓋 use-authorization-manager)

  • access-decision-manager-ref 建立的方法安全攔截器將使用的可選 AccessDecisionManager bean ID。

<intercept-methods> 的子元素

<method-security-metadata-source>

建立 MethodSecurityMetadataSource 例項

<method-security-metadata-source> 屬性

  • id bean 識別符號,用於在上下文中的其他地方引用該 bean。

  • use-expressions 啟用在 <intercept-url> 元素的 'access' 屬性中使用表示式,而不是傳統的配置屬性列表。預設為 'false'。如果啟用,每個屬性應包含一個布林表示式。如果表示式評估為 'true',則授予訪問許可權。

<method-security-metadata-source> 的子元素

<protect>

定義受保護的方法以及適用於它的訪問控制配置屬性。強烈建議您不要將 "protect" 宣告與 "global-method-security" 提供的任何服務混合使用。

<protect> 屬性

  • access 應用於該方法的訪問配置屬性列表,例如 "ROLE_A,ROLE_B"。

  • method 方法名