servlet-appendix-namespace-method-security.md 7.8 KB
Newer Older
dallascao's avatar
dallascao 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180
# 方法安全性

## \<method-security\>

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

### \<method-security\>属性

* **pre-post-enabled **为此应用程序上下文启用 Spring Security 的 pre 和 post 调用注释(@prefilter、@preauthorize、@postfilter、@postauthorize)。默认值为“true”。

* **安全启用**为此应用程序上下文启用 Spring Security 的 @Secured 注释。默认为“false”。

* **支持 JSR250**为此应用程序上下文启用 JSR-250 授权注释(@roleslowled,@permitall,@denyall)。默认为“false”。

* **代理-目标-类**如果为真,将使用基于类的代理,而不是基于接口的代理。默认为“false”。

### \<method-security\>的子元素

* [表达式处理程序](http.html#nsa-expression-handler)

## \<global-method-security\>

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

### \<global-method-security\>属性

* **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 注释。默认值为“禁用”。

### \<global-method-security\>的子元素

* [后调用-提供者](#nsa-after-invocation-provider)

* [表达式处理程序](http.html#nsa-expression-handler)

* [后注解前处理](#nsa-pre-post-annotation-handling)

* [保护切入点](#nsa-protect-pointcut)

## \<after-invocation-provider\>

这个元素可以用来装饰`AfterInvocationProvider`,以便由`<global-method-security>`命名空间维护的安全拦截器使用。你可以在`global-method-security`元素中定义零个或更多个,每个元素都有一个`ref`属性,指向应用程序上下文中的`AfterInvocationProvider` Bean 实例。

### \<after-invocation-provider\>的父元素

* [全局方法安全性](#nsa-global-method-security)

### \<after-invocation-provider\>属性

* **参考**定义了对实现`AfterInvocationProvider`的 Spring  Bean 的引用。

## \<pre-post-annotation-handling\>

允许完全替换用于处理 Spring 安全性的 pre 和 post 调用注释(@prefilter、@preauthorize、@postfilter、@postauthorize)的缺省基于表达式的机制。仅在启用了这些注释的情况下才会应用。

### \<pre-post-annotation-handling\>的父元素

* [全局方法安全性](#nsa-global-method-security)

### \<pre-post-annotation-handling\>的子元素

* [调用-属性-工厂](#nsa-invocation-attribute-factory)

* [调用后-建议](#nsa-post-invocation-advice)

* [调用前的建议](#nsa-pre-invocation-advice)

## \<invocation-attribute-factory\>

定义 prepostinvocationAttributeFactory 实例,该实例用于从带注释的方法生成 pre 和 post 调用元数据。

### \<invocation-attribute-factory\>的父元素

* [后注解前处理](#nsa-pre-post-annotation-handling)

### \<invocation-attribute-factory\>属性

* **参考**定义了对 Spring  Bean ID 的引用。

## \<post-invocation-advice\>

`PostInvocationAdviceProvider`与 ref 一起定制为 \`PostInvocationAuthorizationAdvice`元素的`PostInvocationAuthorizationAdvice`。

### \<post-invocation-advice\>的父元素

* [后注解前处理](#nsa-pre-post-annotation-handling)

### \<post-invocation-advice\>属性

* **参考**定义了对 Spring  Bean ID 的引用。

## \<pre-invocation-advice\>

将`PreInvocationAuthorizationAdviceVoter`与 ref 一起定制为 \`PreInvocationAuthorizationAdviceVoter`元素的`PreInvocationAuthorizationAdviceVoter`

### \<pre-invocation-advice\>的父元素

* [后注解前处理](#nsa-pre-post-annotation-handling)

### \<pre-invocation-advice\>属性

* **参考**定义了对 Spring  Bean ID 的引用。

## 使用固定方法

`<protect-pointcut>`不是使用`@Secured`注释在单个方法或类的基础上定义安全属性,而是可以使用`<protect-pointcut>`元素在服务层中的整个方法和接口集合中定义跨领域的安全约束。你可以在[命名空间介绍](../../authorization/method-security.html#ns-protect-pointcut)中找到一个示例。

### \<protect-pointcut\>的父元素

* [全局方法安全性](#nsa-global-method-security)

### \<protect-pointcut\>属性

* **访问**Access Configuration Attributes 列表,该列表应用于匹配切入点的所有方法,例如“role\_a,role\_b”

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

## \<intercept-methods\>

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

### \<intercept-methods\>属性

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

### \<intercept-methods\>的子元素

* [protect](#nsa-protect)

## \<method-security-metadata-source\>

创建一个 MethodSecurityMetaDataSource 实例

### \<method-security-metadata-source\>属性

* **身份证** Bean 标识符,用于在上下文的其他地方引用 Bean。

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

### \<method-security-metadata-source\>的子元素

* [protect](#nsa-protect)

## \<protect\>

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

### \<protect\>的父元素

* [截取方法](#nsa-intercept-methods)

* [方法-安全性-元数据-源](#nsa-method-security-metadata-source)

### \<protect\>属性

* **访问**访问应用于该方法的配置属性列表,例如“role\_a,role\_b”。

* **方法**一个方法名

[网络安全](http.html)[LDAP 安全性](ldap.html)