Method Security
本站(springdoc.cn)中的内容来源于 spring.io ,原始版权归属于 spring.io。由 springdoc.cn 进行翻译,整理。可供个人学习、研究,未经许可,不得进行任何转载、商用或与之相关的行为。 商标声明:Spring 是 Pivotal Software, Inc. 在美国以及其他国家的商标。 |
<method-security>
这个元素是增加对Spring Security Bean上的方法的安全支持的主要手段。方法可以通过使用注解(在接口或类级别上定义)或定义一组指向性指令来保证安全。
<method-security> 属性
-
pre-post-enabled 为该application context启用Spring Security的 pre 和 post 调用注解(
@PreFilter
、@PreAuthorize
、@PostFilter
、@PostAuthorize
)。默认为 "true"。
-
secured-enabled 为该application context启用Spring Security的
@Secured
注解。默认为 "false"。
-
jsr250-enabled 为这个 application context 启用 JSR-250 authorization 注解(
@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语法定义一组作为子元素的pointcuts来实现安全。
<global-method-security> 属性
-
access-decision-manager-ref 方法安全使用与Web安全相同的
AccessDecisionManager
配置,但这可以用这个属性来重写。默认情况下,一个AffirmativeBased
实现被用于一个RoleVoter
和一个AuthenticatedVoter
。
-
authentication-manager-ref 对
AuthenticationManager
的引用,它应该被用于方法安全(method security)。
-
jsr250-annotations 指定是否要使用JSR-250风格的属性(例如 "RolesAllowed")。这将需要classpath上的
javax.annotation.security
类。将此设置为 "true" 也会给AccessDecisionManager
添加一个Jsr250Voter
,所以如果你使用一个自定义的实现并想使用这些注解,你需要确保你这样做。
-
metadata-source-ref 可以提供一个外部
MethodSecurityMetadataSource
实例,它将优先于其他来源(如默认注解)。
-
mode 这个属性可以被设置为 "aspectj",以指定使用AspectJ而不是默认的Spring AOP。安全的方法必须被
spring-security-aspects
模块中的AnnotationSecurityAspect
织入。需要注意的是,AspectJ遵循Java的规则,即接口上的注解不被继承。这意味着在接口上定义了Security注解的方法将不会被保护。相反,在使用AspectJ时,你必须将Security注解放在类上。
-
order 允许为方法安全拦截器设置建议 "order"(顺序)。
-
pre-post-annotations 指定是否应为此 application context 启用Spring Security的 pre 和 post 调用注解(
@PreFilter
、@PreAuthorize
、@PostFilter
、@PostAuthorize
)的使用。默认为 "disabled"。
-
proxy-target-class 如果为真,将使用基于类的代理,而不是基于接口的代理。
-
run-as-manager-ref 对一个可选的
RunAsManager
实现的引用,它将被配置的MethodSecurityInterceptor
使用。
-
secured-annotations 指定是否应该为该 application context 启用 Spring Security 的
@Secured
注解的使用。默认为 "disabled"。
<after-invocation-provider>
<pre-post-annotation-handling>
<invocation-attribute-factory>
<post-invocation-advice>
<pre-invocation-advice>
Securing Methods 的使用
<protect-pointcut>
<protect-pointcut>
与使用 @Secured
注解在单个方法或类的基础上定义安全属性不同,你可以使用 <protect-pointcut>
元素在服务层中的整组方法和接口上定义交叉的安全约束。你可以在 命名空间介绍 中找到一个例子。