方法安全
<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',则授予访问权限。