Method Security
<method-security>
此元素是为 Spring Security Bean 添加对安全方法进行支持的主要方式。可以通过使用批注(在接口或类级别定义)或通过定义一组切入点来自动保护方法。
This element is the primary means of adding support for securing methods on Spring Security beans. Methods can be secured by the use of annotations (defined at the interface or class level) or by defining a set of pointcuts.
<method-security> attributes
-
pre-post-enabled Enables Spring Security’s pre and post invocation annotations (@PreFilter, @PreAuthorize, @PostFilter, @PostAuthorize) for this application context. Defaults to "true".
-
secured-enabled Enables Spring Security’s @Secured annotation for this application context. Defaults to "false".
-
jsr250-enabled Enables JSR-250 authorization annotations (@RolesAllowed, @PermitAll, @DenyAll) for this application context. Defaults to "false".
-
mode If set to "aspectj", then uses AspectJ to intercept method invocations.
-
proxy-target-class If true, class based proxying will be used instead of interface based proxying. Defaults to "false".
-
security-context-holder-strategy-ref Specifies a SecurityContextHolderStrategy to use when retrieving the SecurityContext. Defaults to the value returned by SecurityContextHolder.getContextHolderStrategy().
-
observation-registry-ref A reference to the
ObservationRegistry
used for theFilterChain
and related components
<global-method-security>
此元素是为 Spring Security Bean 添加对安全方法进行支持的主要方式。可以通过使用批注(在接口或类级别定义)或通过使用 AspectJ 语法定义一组切入点作为子元素来自动保护方法。
This element is the primary means of adding support for securing methods on Spring Security beans. Methods can be secured by the use of annotations (defined at the interface or class level) or by defining a set of pointcuts as child elements, using AspectJ syntax.
<global-method-security> Attributes
-
access-decision-manager-ref Method security uses the same
AccessDecisionManager
configuration as web security, but this can be overridden using this attribute. By default an AffirmativeBased implementation is used for with a RoleVoter and an AuthenticatedVoter.
-
authentication-manager-ref A reference to an
AuthenticationManager
that should be used for method security.
-
jsr250-annotations Specifies whether JSR-250 style attributes are to be used (for example "RolesAllowed"). This will require the javax.annotation.security classes on the classpath. Setting this to true also adds a
Jsr250Voter
to theAccessDecisionManager
, so you need to make sure you do this if you are using a custom implementation and want to use these annotations.
-
metadata-source-ref An external
MethodSecurityMetadataSource
instance can be supplied which will take priority over other sources (such as the default annotations).
-
mode This attribute can be set to "aspectj" to specify that AspectJ should be used instead of the default Spring AOP. Secured methods must be woven with the
AnnotationSecurityAspect
from thespring-security-aspects
module.
需要注意的是,AspectJ 遵循 Java 的一项规则,即接口上的批注不会被继承。这意味着,对于在接口上定义安全批注的方法,将不会变得安全。相反,在使用 AspectJ 时,您必须将安全批注放在类上。
It is important to note that AspectJ follows Java’s rule that annotations on interfaces are not inherited. This means that methods that define the Security annotations on the interface will not be secured. Instead, you must place the Security annotation on the class when using AspectJ.
-
order Allows the advice "order" to be set for the method security interceptor.
-
pre-post-annotations Specifies whether the use of Spring Security’s pre and post invocation annotations (@PreFilter, @PreAuthorize, @PostFilter, @PostAuthorize) should be enabled for this application context. Defaults to "disabled".
-
proxy-target-class If true, class based proxying will be used instead of interface based proxying.
-
run-as-manager-ref A reference to an optional
RunAsManager
implementation which will be used by the configuredMethodSecurityInterceptor
-
secured-annotations Specifies whether the use of Spring Security’s @Secured annotations should be enabled for this application context. Defaults to "disabled".
<after-invocation-provider>
此元素可用于装饰 AfterInvocationProvider
,以供 <global-method-security>
命名空间维护的安全拦截器使用。您可以在 global-method-security
元素内定义零个或多个此类元素,每个元素都有一个 ref
属性,指向应用程序上下文中 AfterInvocationProvider
Bean 实例。
This element can be used to decorate an AfterInvocationProvider
for use by the security interceptor maintained by the <global-method-security>
namespace.
You can define zero or more of these within the global-method-security
element, each with a ref
attribute pointing to an AfterInvocationProvider
bean instance within your application context.
<pre-post-annotation-handling>
允许完全替换用于处理 Spring Security 的调用前和调用后批注(@PreFilter、@PreAuthorize、@PostFilter、@PostAuthorize)的基于表达式的默认机制。仅当启用这些批注时才适用。
Allows the default expression-based mechanism for handling Spring Security’s pre and post invocation annotations (@PreFilter, @PreAuthorize, @PostFilter, @PostAuthorize) to be replaced entirely. Only applies if these annotations are enabled.
<invocation-attribute-factory>
<post-invocation-advice>
通过将 ref 作为 <pre-post-annotation-handling> 元素的 PostInvocationAuthorizationAdvice
来自定义 PostInvocationAdviceProvider
。
Customizes the PostInvocationAdviceProvider
with the ref as the PostInvocationAuthorizationAdvice
for the <pre-post-annotation-handling> element.
<pre-invocation-advice>
通过将 ref 作为 <pre-post-annotation-handling> 元素的 PreInvocationAuthorizationAdviceVoter
来自定义 PreInvocationAuthorizationAdviceVoter
。
Customizes the PreInvocationAuthorizationAdviceVoter
with the ref as the PreInvocationAuthorizationAdviceVoter
for the <pre-post-annotation-handling> element.
Securing Methods using
<protect-pointcut>`的注释指定了安全属性,而不是在单个方法或类基础上 `@Secured
,您可以在您的服务层中使用 `<protect-pointcut>`元素来定义跨越整个方法和接口的跨域安全约束。您可以在 namespace introduction中找到一个示例。
<protect-pointcut>
Rather than defining security attributes on an individual method or class basis using the @Secured
annotation, you can define cross-cutting security constraints across whole sets of methods and interfaces in your service layer using the <protect-pointcut>
element.
You can find an example in the namespace introduction.
<intercept-methods>
可用于在 Bean 定义中为 Bean 添加安全拦截器,并为 Bean 的方法设置访问配置属性
Can be used inside a bean definition to add a security interceptor to the bean and set up access configuration attributes for the bean’s methods
<intercept-methods> Attributes
-
access-decision-manager-ref Optional AccessDecisionManager bean ID to be used by the created method security interceptor.
<method-security-metadata-source>
创建一个 MethodSecurityMetadataSource 实例
Creates a MethodSecurityMetadataSource instance
<method-security-metadata-source> Attributes
-
id A bean identifier, used for referring to the bean elsewhere in the context.
-
use-expressions Enables the use of expressions in the 'access' attributes in <intercept-url> elements rather than the traditional list of configuration attributes. Defaults to 'false'. If enabled, each attribute should contain a single Boolean expression. If the expression evaluates to 'true', access will be granted.
<protect>
定义一个受保护的方法和适用于它的访问控制配置属性。我们强烈建议您不要将“保护”声明与由“global-method-security”提供的任何服务混用。
Defines a protected method and the access control configuration attributes that apply to it. We strongly advise you NOT to mix "protect" declarations with any services provided "global-method-security".