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`的引用。
<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>
<pre-post-annotation-handling>
<invocation-attribute-factory>
<post-invocation-advice>
<pre-invocation-advice>
Securing Methods using
<protect-pointcut>`的注释指定了安全属性,而不是在单个方法或类基础上 `@Secured
,您可以在您的服务层中使用 `<protect-pointcut>`元素来定义跨越整个方法和接口的跨域安全约束。您可以在 namespace introduction中找到一个示例。