方法安全
<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配置,但可以使用此屬性覆蓋。預設情況下,使用帶有 RoleVoter 和 AuthenticatedVoter 的 AffirmativeBased 實現。
-
authentication-manager-ref 對應用於方法安全性的
AuthenticationManager的引用。
-
jsr250-annotations 指定是否使用 JSR-250 樣式屬性(例如 "RolesAllowed")。這將要求類路徑上存在 javax.annotation.security 類。將其設定為 true 還會向
AccessDecisionManager新增一個Jsr250Voter,因此如果您使用自定義實現並希望使用這些註解,則需要確保這樣做。
-
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>
此元素可用於裝飾 AfterInvocationProvider,以便由 <global-method-security> 名稱空間維護的安全攔截器使用。您可以在 global-method-security 元素中定義零個或多個此類元素,每個元素都有一個 ref 屬性,指向應用程式上下文中的 AfterInvocationProvider bean 例項。
<after-invocation-provider> 屬性
|
|
-
ref 定義對實現
AfterInvocationProvider的 Spring bean 的引用。
<pre-post-annotation-handling>
<invocation-attribute-factory>
定義 PrePostInvocationAttributeFactory 例項,該例項用於從帶註解的方法生成前置和後置呼叫元資料。
|
|
<post-invocation-advice>
使用 ref 作為 <pre-post-annotation-handling> 元素的 PostInvocationAuthorizationAdvice,自定義 PostInvocationAdviceProvider。
|
|
<pre-invocation-advice>
使用 ref 作為 <pre-post-annotation-handling> 元素的 PreInvocationAuthorizationAdviceVoter,自定義 PreInvocationAuthorizationAdviceVoter。
|
|
使用保護方法
<protect-pointcut> 您可以使用 <protect-pointcut> 元素,而不是使用 @Secured 註解在單個方法或類基礎上定義安全屬性,而是在服務層中為整套方法和介面定義交叉的安全約束。您可以在名稱空間介紹中找到示例。
<method-security-metadata-source>
建立一個 MethodSecurityMetadataSource 例項。
|
|
<method-security-metadata-source> 屬性
-
id bean 識別符號,用於在上下文中的其他地方引用 bean。
-
use-expressions 啟用在 <intercept-url> 元素的 'access' 屬性中使用表示式,而不是傳統的配置屬性列表。預設為 'false'。如果啟用,每個屬性應包含一個布林表示式。如果表示式評估為 'true',則授予訪問許可權。