方法安全
<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 允许为方法安全拦截器设置建议“顺序”。
-
pre-post-annotations 指定是否为该应用程序上下文启用 Spring Security 的前置和后置调用注释(@PreFilter、@PreAuthorize、@PostFilter、@PostAuthorize)。默认值为“disabled”。
-
proxy-target-class 如果为 true,将使用基于类的代理而不是基于接口的代理。
-
run-as-manager-ref 对可选的
RunAsManager
实现的引用,它将由配置的MethodSecurityInterceptor
使用。
-
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
注解在单个方法或类基础上定义安全属性,您可以使用 <protect-pointcut>
元素在服务层中定义跨越整个方法集和接口的跨切安全约束。您可以在 命名空间介绍 中找到一个示例。