41.4 Method Security方法安全性

41.4.1 <global-method-security>

这个元素是为Spring Security beans上的安全方法添加支持的主要手段。可以通过使用注释(在接口或类级别定义)或者通过使用AspectJ语法将一组切入点定义为子元素来保护方法。

<global-method-security> Attributes

  • access-decision-manager-ref 方法安全性使用与web安全性相同的AccessDecisionManager配置,但这可以使用此属性覆盖。默认情况下,基于确认AffirmativeBased 的实现用于角色投票者RoleVoter 和授权投票者AuthenticatedVoter。

  • authentication-manager-ref 应该用于方法安全性的身份验证管理器的引用。

  • jsr250-annotations指定是否要使用JSR-250样式属性(例如“角色化”)。这将需要类路径上的javax.annotation.security类。将此设置为true还会将一个Jsr 250选民添加到访问决策管理器中,因此如果您使用自定义实现并希望使用这些注释,您需要确保这样做。

  • metadata-source-ref 可以提供一个外部MethodSecurityMetadataSource实例,该实例将优先于其他源(如默认注释)。

  • mode 该属性可以设置为“aspectj”,以指定应该使用AspectJ而不是默认的Spring AOP。安全方法必须与spring-security-aspects模块中的注释安全属性相结合。

值得注意的是,AspectJ遵循Java的规则,即接口上的注释是不可继承的。这意味着在接口上定义安全注释的方法将不会受到保护。相反,在使用AspectJ时,必须将安全性注释放在类上。

  • order 允许为方法安全拦截器设置建议“顺序”。

  • pre-post-annotations 指定是否应该为此应用程序上下文启用Spring Security的调用前和调用后注释(@ PreFilter,@PreAuthorize,@PostFilter,@PostAuthorize)。默认为“禁用”。

  • proxy-target-class 如果为真,将使用基于类的代理,而不是基于接口的代理。

  • run-as-manager-ref 对可选运行管理器实现的引用,该实现将由已配置的MethodSecurityInterceptor使用

  • secured-annotations 指定是否应该为此应用程序上下文启用Spring Security的@Secured注释。默认为“disabled”。

Child Elements of <global-method-security>

41.4.2 <after-invocation-provider>

此元素可用于修饰由<global-method-security>命名空间维护的安全性拦截器使用的AfterInvocationProvider。您可以在global-method-security元素中定义零个或多个这样的元素,每个元素都有一个引用属性指向您的应用程序上下文中的一个AfterInvocationProvider bean实例。

<after-invocation-provider> Attributes

  • ref 定义对实现AfterInvocationProvider的Spring bean的引用。

41.4.3 <pre-post-annotation-handling>

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

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

41.4.4 <invocation-attribute-factory>

定义前置调用属性工厂实例,该实例用于从带注释的方法生成调用前和调用后元数据。

<invocation-attribute-factory> Attributes

  • ref 定义对spring bean标识的引用

41.4.5 <post-invocation-advice>

使用引用作为<pre-post-annotation-handling>元素的位置授权PostInvocationAuthorizationAdvice 建议来自定义位置授权提供程序PostInvocationAdviceProvider 。

<post-invocation-advice> Attributes

  • ref  定义对spring bean标识的引用

41.4.6 <pre-invocation-advice>

使用引用作为<pre-post-annotation-handling>元素的前置位置授权建议投票者PreInvocationAuthorizationAdviceVoter ,自定义前置位置授权建议投票者PreInvocationAuthorizationAdviceVoter 。

<pre-invocation-advice> Attributes

  • ref 定义对spring bean标识的引用

41.4.7 Securing Methods using

您可以使用<protect-pointcut>元素跨服务层中的整套方法和接口定义交叉安全约束,而不是使用@Secured注释在单个方法或类的基础上定义安全属性。您可以在名称空间介绍中找到一个示例。

<protect-pointcut> Attributes

  • access 访问适用于所有匹配切入点的方法的配置属性列表,例如“角色甲,角色乙”

  • expression AspectJ表达式,包括“执行”关键字。例如,“执行(int com . foo . TargetObject . CountLength(String))”(不带引号)。

41.4.8 <intercept-methods>

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

<intercept-methods> Attributes

  • access-decision-manager-ref 创建的方法安全拦截器使用的可选访问决策管理器AccessDecisionManager bean标识。

Child Elements of <intercept-methods>

41.4.9 <method-security-metadata-source>

创建MethodSecurityMetadataSource 实例

<method-security-metadata-source> Attributes

  • id 一个bean标识符,用于引用上下文中其他地方的bean。

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

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

41.4.10 <protect>

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

<protect> Attributes

  • access 访问适用于该方法的访问配置属性列表,例如“角色A,角色B”。

  • method 方法名