# 方法安全性 ## \ 这个元素是在 Spring Security bean 上添加对方法安全的支持的主要手段。方法可以通过使用注释(在接口或类级别上定义)或通过定义一组切入点来保护。 ### \属性 * **pre-post-enabled **为此应用程序上下文启用 Spring Security 的 pre 和 post 调用注释(@prefilter、@preauthorize、@postfilter、@postauthorize)。默认值为“true”。 * **安全启用**为此应用程序上下文启用 Spring Security 的 @Secured 注释。默认为“false”。 * **支持 JSR250**为此应用程序上下文启用 JSR-250 授权注释(@roleslowled,@permitall,@denyall)。默认为“false”。 * **代理-目标-类**如果为真,将使用基于类的代理,而不是基于接口的代理。默认为“false”。 ### \的子元素 * [表达式处理程序](http.html#nsa-expression-handler) ## \ 这个元素是在 Spring Security bean 上添加对方法安全的支持的主要手段。方法可以通过使用注释(在接口或类级别定义)或使用 AspectJ 语法将一组切入点定义为子元素来保护。 ### \属性 * **access-decision-manager-ref **Method Security 使用与 Web Security 相同的`AccessDecisionManager`配置,但是可以使用此属性重写此配置。默认情况下,基于确认的实现用于 RoleVoter 和 AuthentidVoter。 * **认证-管理器-ref **对方法安全性应该使用的`AuthenticationManager`的引用。 * **JSR250-注释**指定是否使用 JSR-250 样式属性(例如“允许滚动”)。这将需要 Classpath 上的 javax.annotation.security 类。将此设置为 true 还会为`Jsr250Voter`添加`AccessDecisionManager`,因此,如果你正在使用自定义实现并希望使用这些注释,则需要确保执行此操作。 * **元数据-源-参考**可以提供一个外部`MethodSecurityMetadataSource`实例,该实例将优先于其他源(例如默认注释)。 * **模式**此属性可以设置为“AspectJ”,以指定应该使用 AspectJ,而不是默认的 Spring AOP。安全方法必须与`spring-security-aspects`模块中的`AnnotationSecurityAspect`交织在一起。 需要注意的是,AspectJ 遵循了 Java 的规则,即接口上的注释不会被继承。这意味着在接口上定义安全注释的方法将不受保护。相反,在使用 AspectJ 时,你必须在类上放置安全注释。 * **秩序**允许为方法安全性拦截器设置通知“order”。 * **pre-post 注释**指定是否应为此应用程序上下文启用 Spring Security 的 pre 和 post 调用注释(@prefilter、@preauthorize、@postfilter、@postauthorize)。默认值为“禁用”。 * **代理-目标-类**如果为真,将使用基于类的代理,而不是基于接口的代理。 * **Run-as-manager-ref **对可选`RunAsManager`实现的引用,该实现将由配置的`MethodSecurityInterceptor`使用 * **安全注释**指定是否应为此应用程序上下文启用 Spring Security 的 @Secured 注释。默认值为“禁用”。 ### \的子元素 * [后调用-提供者](#nsa-after-invocation-provider) * [表达式处理程序](http.html#nsa-expression-handler) * [后注解前处理](#nsa-pre-post-annotation-handling) * [保护切入点](#nsa-protect-pointcut) ## \ 这个元素可以用来装饰`AfterInvocationProvider`,以便由``命名空间维护的安全拦截器使用。你可以在`global-method-security`元素中定义零个或更多个,每个元素都有一个`ref`属性,指向应用程序上下文中的`AfterInvocationProvider` Bean 实例。 ### \的父元素 * [全局方法安全性](#nsa-global-method-security) ### \属性 * **参考**定义了对实现`AfterInvocationProvider`的 Spring Bean 的引用。 ## \ 允许完全替换用于处理 Spring 安全性的 pre 和 post 调用注释(@prefilter、@preauthorize、@postfilter、@postauthorize)的缺省基于表达式的机制。仅在启用了这些注释的情况下才会应用。 ### \的父元素 * [全局方法安全性](#nsa-global-method-security) ### \的子元素 * [调用-属性-工厂](#nsa-invocation-attribute-factory) * [调用后-建议](#nsa-post-invocation-advice) * [调用前的建议](#nsa-pre-invocation-advice) ## \ 定义 prepostinvocationAttributeFactory 实例,该实例用于从带注释的方法生成 pre 和 post 调用元数据。 ### \的父元素 * [后注解前处理](#nsa-pre-post-annotation-handling) ### \属性 * **参考**定义了对 Spring Bean ID 的引用。 ## \ 将`PostInvocationAdviceProvider`与 ref 一起定制为 \`PostInvocationAuthorizationAdvice`元素的`PostInvocationAuthorizationAdvice`。 ### \的父元素 * [后注解前处理](#nsa-pre-post-annotation-handling) ### \属性 * **参考**定义了对 Spring Bean ID 的引用。 ## \ 将`PreInvocationAuthorizationAdviceVoter`与 ref 一起定制为 \`PreInvocationAuthorizationAdviceVoter`元素的`PreInvocationAuthorizationAdviceVoter`。 ### \的父元素 * [后注解前处理](#nsa-pre-post-annotation-handling) ### \属性 * **参考**定义了对 Spring Bean ID 的引用。 ## 使用固定方法 ``不是使用`@Secured`注释在单个方法或类的基础上定义安全属性,而是可以使用``元素在服务层中的整个方法和接口集合中定义跨领域的安全约束。你可以在[命名空间介绍](../../authorization/method-security.html#ns-protect-pointcut)中找到一个示例。 ### \的父元素 * [全局方法安全性](#nsa-global-method-security) ### \属性 * **访问**Access Configuration Attributes 列表,该列表应用于匹配切入点的所有方法,例如“role\_a,role\_b” * **表达式**AspectJ 表达式,包括`execution`关键字。例如,`execution(int com.foo.TargetObject.countLength(String))`。 ## \ 可以在 Bean 定义中使用,以便向 Bean 添加安全拦截器,并为 Bean 的方法设置访问配置属性 ### \属性 * **access-decision-manager-ref **可选的 AccessDecisionManager Bean ID 将被创建的方法安全拦截器使用。 ### \的子元素 * [protect](#nsa-protect) ## \ 创建一个 MethodSecurityMetaDataSource 实例 ### \属性 * **身份证** Bean 标识符,用于在上下文的其他地方引用 Bean。 * **使用表达式**允许在 \元素中的“access”属性中使用表达式,而不是使用传统的配置属性列表。默认为“false”。如果启用,每个属性应该包含一个布尔表达式。如果表达式计算为“true”,则将授予访问权限。 ### \的子元素 * [protect](#nsa-protect) ## \ 定义受保护的方法和应用于该方法的访问控制配置属性。我们强烈建议你不要将“protect”声明与“global-method-security”提供的任何服务混为一谈。 ### \的父元素 * [截取方法](#nsa-intercept-methods) * [方法-安全性-元数据-源](#nsa-method-security-metadata-source) ### \属性 * **访问**访问应用于该方法的配置属性列表,例如“role\_a,role\_b”。 * **方法**一个方法名 [网络安全](http.html)[LDAP 安全性](ldap.html)