方法安全
<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
引用
<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>
<pre-post-annotation-handling>
<invocation-attribute-factory>
<post-invocation-advice>
<pre-invocation-advice>
使用以下方式保護方法
<protect-pointcut>
您可以使用 <protect-pointcut>
元素在服務層中為整個方法和介面集定義橫切安全約束,而不是使用 @Secured
註解在單個方法或類上定義安全屬性。您可以在 名稱空間介紹 中找到示例。