Method Security

<method-security>

此元素是为 Spring Security Bean 添加对安全方法进行支持的主要方式。可以通过使用批注(在接口或类级别定义)或通过定义一组切入点来自动保护方法。

<method-security> attributes

  • *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*如果为真,则将使用基于类的代理而不是基于接口的代理。默认为“false”。

  • *security-context-holder-strategy-ref*在检索 SecurityContext 时指定要使用的 SecurityContextHolderStrategy。默认为由 SecurityContextHolder.getContextHolderStrategy() 返回的值。

  • *observation-registry-ref*用于 `FilterChain`和相关组件的 `ObservationRegistry`的引用。

Child Elements of <method-security>

<global-method-security>

此元素是为 Spring Security Bean 添加对安全方法进行支持的主要方式。可以通过使用批注(在接口或类级别定义)或通过使用 AspectJ 语法定义一组切入点作为子元素来自动保护方法。

<global-method-security> Attributes

  • *access-decision-manager-ref*方法安全性使用与 Web 安全性相同的 `AccessDecisionManager`配置,但可使用此属性覆盖此配置。默认情况下,AffirmativeBased 实现用于带有 RoleVoter 和 AuthenticatedVoter。

  • *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*如果为真,则将使用基于类的代理而不是基于接口的代理。

  • *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 实例。

Parent Elements of <after-invocation-provider>

<after-invocation-provider> Attributes

  • *ref*定义引用实现 `AfterInvocationProvider`的 Spring Bean。

<pre-post-annotation-handling>

允许完全替换用于处理 Spring Security 的调用前和调用后批注(@PreFilter、@PreAuthorize、@PostFilter、@PostAuthorize)的基于表达式的默认机制。仅当启用这些批注时才适用。

Parent Elements of <pre-post-annotation-handling>

<invocation-attribute-factory>

定义用于从带批注的方法生成调用前和调用后元数据的 PrePostInvocationAttributeFactory 实例。

Parent Elements of <invocation-attribute-factory>

<invocation-attribute-factory> Attributes

  • *ref*定义引用 Spring Bean Id。

<post-invocation-advice>

通过将 ref 作为 <pre-post-annotation-handling> 元素的 PostInvocationAuthorizationAdvice 来自定义 PostInvocationAdviceProvider

Parent Elements of <post-invocation-advice>

<post-invocation-advice> Attributes

  • *ref*定义引用 Spring Bean Id。

<pre-invocation-advice>

通过将 ref 作为 <pre-post-annotation-handling> 元素的 PreInvocationAuthorizationAdviceVoter 来自定义 PreInvocationAuthorizationAdviceVoter

Parent Elements of <pre-invocation-advice>

<pre-invocation-advice> Attributes

  • *ref*定义引用 Spring Bean Id。

Securing Methods using

<protect-pointcut>`的注释指定了安全属性,而不是在单个方法或类基础上 `@Secured,您可以在您的服务层中使用 `<protect-pointcut>`元素来定义跨越整个方法和接口的跨域安全约束。您可以在 namespace introduction中找到一个示例。

Parent Elements of <protect-pointcut>

<protect-pointcut> Attributes

  • *access*访问配置属性列表,适用于与切入点匹配的所有方法,例如“ROLE_A,ROLE_B”

  • *expression*切面表达式,包括 execution`关键字。例如,`execution(int com.foo.TargetObject.countLength(String))

<intercept-methods>

可用于在 Bean 定义中为 Bean 添加安全拦截器,并为 Bean 的方法设置访问配置属性

<intercept-methods> Attributes

  • *use-authorization-manager*使用 AuthorizationManager API 而不是 AccessDecisionManager(默认为 true)

  • *authorization-manager-ref*可选的 AuthorizationManager Bean ID,用于替代默认值(取代 use-authorization-manager)

  • *access-decision-manager-ref*创建的方法安全性拦截器使用的可选 AccessDecisionManager Bean ID。

Child Elements of <intercept-methods>

<method-security-metadata-source>

创建一个 MethodSecurityMetadataSource 实例

<method-security-metadata-source> Attributes

  • *id*Bean 标识符,用于在上下文的其他位置引用 Bean。

  • *use-expressions*允许在 <intercept-url> 元素中的“访问”属性中使用表达式,而不是传统配置属性列表。默认为“false”。如果启用,则每个属性都应包含一个布尔表达式。如果表达式的结果为“true”,则将授予访问权限。

Child Elements of <method-security-metadata-source>

<protect>

定义一个受保护的方法和适用于它的访问控制配置属性。我们强烈建议您不要将“保护”声明与由“global-method-security”提供的任何服务混用。

<protect> Attributes

  • *access*适用于该方法的访问配置属性列表,例如“ROLE_A,ROLE_B”。

  • method A method name