123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331 |
- = Method Security
- [[nsa-method-security]]
- == <method-security>
- 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.
- [[nsa-method-security-attributes]]
- === <method-security> attributes
- [[nsa-method-security-pre-post-enabled]]
- * **pre-post-enabled**
- Enables Spring Security's pre and post invocation annotations (@PreFilter, @PreAuthorize, @PostFilter, @PostAuthorize) for this application context.
- Defaults to "true".
- [[nsa-method-security-secured-enabled]]
- * **secured-enabled**
- Enables Spring Security's @Secured annotation for this application context.
- Defaults to "false".
- [[nsa-method-security-jsr250-enabled]]
- * **jsr250-enabled**
- Enables JSR-250 authorization annotations (@RolesAllowed, @PermitAll, @DenyAll) for this application context.
- Defaults to "false".
- [[nsa-method-security-proxy-target-class]]
- * **proxy-target-class**
- If true, class based proxying will be used instead of interface based proxying.
- Defaults to "false".
- [[nsa-method-security-children]]
- === Child Elements of <method-security>
- * xref:servlet/appendix/namespace/http.adoc#nsa-expression-handler[expression-handler]
- [[nsa-global-method-security]]
- == <global-method-security>
- The `<global-method-security>` element is the primary means of adding support for securing methods on Spring Security beans.
- You can secure methods by using annotations (defined at the interface or class level) or by defining a set of pointcuts as child elements with AspectJ syntax.
- [[nsa-global-method-security-attributes]]
- === <global-method-security> Attributes
- The `<global-method-security>` element has the following attributes:
- [[nsa-global-method-security-access-decision-manager-ref]]
- `access-decision-manager-ref`::
- Method security uses the same `AccessDecisionManager` configuration as web security, but using this attribute can override this arrangement.
- By default, an `AffirmativeBased` implementation is used with a `RoleVoter` and an `AuthenticatedVoter`.
- [[nsa-global-method-security-authentication-manager-ref]]
- `authentication-manager-ref`::
- A reference to the `AuthenticationManager` that should be used for method security.
- [[nsa-global-method-security-jsr250-annotations]]
- `jsr250-annotations`::
- Specifies whether JSR-250 style attributes are to be used (for example, `RolesAllowed`).
- Doing so requires the `javax.annotation.security` classes to be on the classpath.
- Setting this to `true` also adds a `Jsr250Voter` to the `AccessDecisionManager`, so you need to make sure that you do so if you use a custom implementation and want to use these annotations.
- [[nsa-global-method-security-metadata-source-ref]]
- `metadata-source-ref`::
- You can supply an external `MethodSecurityMetadataSource` instance, which will take priority over other sources (such as the default annotations).
- [[nsa-global-method-security-mode]]
- `mode`::
- You can set this attribute to `aspectj` to specify that AspectJ should be used instead of the default Spring AOP.
- You must weave secured methods with the `AnnotationSecurityAspect` from the `spring-security-aspects` module.
- +
- [NOTE]
- ====
- AspectJ follows Java's rule that annotations on interfaces are not inherited.
- This means that methods that define the Security annotations on the interface are not secured.
- Instead, you must place the Security annotation on the class when you use AspectJ.
- ====
- [[nsa-global-method-security-order]]
- `order`::
- Lets the `order` advice be set for the method security interceptor.
- [[nsa-global-method-security-pre-post-annotations]]
- `pre-post-annotations`::
- Specifies whether the use of Spring Security's pre- and post-invocation annotations (`@PreFilter`, `@PreAuthorize`, `@PostFilter`, and `@PostAuthorize`) should be enabled for this application context.
- Default: `disabled`
- [[nsa-global-method-security-proxy-target-class]]
- `proxy-target-class`::
- If `true`, class-based proxying is used instead of interface-based proxying.
- [[nsa-global-method-security-run-as-manager-ref]]
- `run-as-manager-ref`::
- A reference to an optional `RunAsManager` implementation, which is used by the configured `MethodSecurityInterceptor`.
- [[nsa-global-method-security-secured-annotations]]
- `secured-annotations`::
- Specifies whether the use of Spring Security's `@Secured` annotations should be enabled for this application context.
- Default: `disabled`
- [[nsa-global-method-security-children]]
- === Child Elements of <global-method-security>
- The `<global-method-security>` has the following child elements:
- * <<nsa-after-invocation-provider,after-invocation-provider>>
- * xref:servlet/appendix/namespace/http.adoc#nsa-expression-handler[expression-handler]
- * <<nsa-pre-post-annotation-handling,pre-post-annotation-handling>>
- * <<nsa-protect-pointcut,protect-pointcut>>
- [[nsa-after-invocation-provider]]
- == <after-invocation-provider>
- You can use the `<after-invocation-provider>` element to decorate an `AfterInvocationProvider` for use by the security interceptor that is maintained by the `<global-method-security>` namespace.
- You can define zero or more of these elements within the `global-method-security` element, each with a `ref` attribute that points to an `AfterInvocationProvider` bean instance within your application context.
- [[nsa-after-invocation-provider-parents]]
- === Parent Elements of <after-invocation-provider>
- The parent element of the `<after-invocation-provider>` is the <<nsa-global-method-security,global-method-security>> element.
- [[nsa-after-invocation-provider-attributes]]
- === <after-invocation-provider> Attributes
- The `<after-invocation-provider>` element has a single attribute:
- [[nsa-after-invocation-provider-ref]]
- `ref`::
- Defines a reference to a Spring bean that implements `AfterInvocationProvider`.
- [[nsa-pre-post-annotation-handling]]
- == <pre-post-annotation-handling>
- The `<pre-post-annotation-handling>` lets us entirely replace the default expression-based mechanism for handling Spring Security's pre- and post-invocation annotations (`@PreFilter`, `@PreAuthorize`, `@PostFilter`, `@PostAuthorize`).
- It applies only if these annotations are enabled.
- [[nsa-pre-post-annotation-handling-parents]]
- === Parent Elements of <pre-post-annotation-handling>
- The parent element of the `<pre-post-annotation-handling>` element is the <<nsa-global-method-security,global-method-security>> element.
- [[nsa-pre-post-annotation-handling-children]]
- === Child Elements of <pre-post-annotation-handling>
- The `<pre-post-annotation-handling>` element has the following children:
- * <<nsa-invocation-attribute-factory,invocation-attribute-factory>>
- * <<nsa-post-invocation-advice,post-invocation-advice>>
- * <<nsa-pre-invocation-advice,pre-invocation-advice>>
- [[nsa-invocation-attribute-factory]]
- == <invocation-attribute-factory>
- The `<invocation-attribute-factory>` element defines the `PrePostInvocationAttributeFactory` instance to use to generate pre- and post-invocation metadata from the annotated methods.
- [[nsa-invocation-attribute-factory-parents]]
- === Parent Elements of <invocation-attribute-factory>
- The parent element of the `<invocation-attribute-factory>` element is the <<nsa-pre-post-annotation-handling,`pre-post-annotation-handling`>> element.
- [[nsa-invocation-attribute-factory-attributes]]
- === <invocation-attribute-factory> Attributes
- The `<invocation-attribute-factory>` has a single attribute:
- [[nsa-invocation-attribute-factory-ref]]
- `ref`::
- Defines a reference to a Spring bean ID.
- [[nsa-post-invocation-advice]]
- == <post-invocation-advice>
- The `<post-invocation-advice>` element customizes the `PostInvocationAdviceProvider` with the value of the `ref` attribute as the `PostInvocationAuthorizationAdvice` for the `<pre-post-annotation-handling>` element.
- [[nsa-post-invocation-advice-parents]]
- === Parent Elements of <post-invocation-advice>
- The parent element of the `<post-invocation-advice>` element is the <<nsa-pre-post-annotation-handling,pre-post-annotation-handling>> element.
- [[nsa-post-invocation-advice-attributes]]
- === <post-invocation-advice> Attributes
- The `<post-invocation-advice>` has a single attribute:
- [[nsa-post-invocation-advice-ref]]
- `ref`::
- Defines a reference to a Spring bean ID.
- [[nsa-pre-invocation-advice]]
- == <pre-invocation-advice>
- The `<pre-invocation-advice>` element customizes the `PreInvocationAuthorizationAdviceVoter` with the value of the `ref` attribute as the `PreInvocationAuthorizationAdviceVoter` for the `<pre-post-annotation-handling>` element.
- [[nsa-pre-invocation-advice-parents]]
- === Parent Elements of <pre-invocation-advice>
- The parent element of the `<pre-invocation-advice>` is the <<nsa-pre-post-annotation-handling,pre-post-annotation-handling>> element.
- [[nsa-pre-invocation-advice-attributes]]
- === <pre-invocation-advice> Attributes
- The `<pre-invocation-advice>` element has a single attribute:
- [[nsa-pre-invocation-advice-ref]]
- ref::
- Defines a reference to a Spring bean ID.
- [[nsa-protect-pointcut]]
- == Securing Methods using <protect-pointcut>
- Rather than defining security attributes on an individual method or class basis by using the `@Secured` annotation, you can define cross-cutting security constraints across whole sets of methods and interfaces in your service layer by using the `<protect-pointcut>` element.
- You can find an example in the xref:servlet/authorization/method-security.adoc#ns-protect-pointcut[namespace introduction].
- [[nsa-protect-pointcut-parents]]
- === Parent Elements of <protect-pointcut>
- The parent element of the `<protect-pointcut>` element is the <<nsa-global-method-security,global-method-security>> element.
- [[nsa-protect-pointcut-attributes]]
- === <protect-pointcut> Attributes
- The `<protect-pointcut>` has the following attributes:
- [[nsa-protect-pointcut-access]]
- `access`::
- Access configuration attributes list that applies to all methods that match the pointcut -- for example,
- `ROLE_A,ROLE_B`.
- [[nsa-protect-pointcut-expression]]
- `expression`::
- An AspectJ expression, including the `execution` keyword -- for example, `execution(int com.foo.TargetObject.countLength(String))`.
- [[nsa-intercept-methods]]
- == <intercept-methods>
- You can use the `<intercept-methods>` element inside a bean definition to add a security interceptor to the bean and set up access configuration attributes for the bean's methods
- [[nsa-intercept-methods-attributes]]
- === <intercept-methods> Attributes
- The `<intercept-methods>` element has a single attribute:
- [[nsa-intercept-methods-access-decision-manager-ref]]
- `access-decision-manager-ref`::
- Optional `AccessDecisionManager` bean ID to be used by the created method security interceptor.
- [[nsa-intercept-methods-children]]
- === Child Elements of <intercept-methods>
- The child element of the `<intercept-methods>` is the <<nsa-protect,protect>> element.
- [[nsa-method-security-metadata-source]]
- == <method-security-metadata-source>
- The `<method-security-metadata-source>` element creates a `MethodSecurityMetadataSource` instance.
- [[nsa-method-security-metadata-source-attributes]]
- === <method-security-metadata-source> Attributes
- The `<method-security-metadata-source>` element has the following attributes:
- [[nsa-method-security-metadata-source-id]]
- `id`::
- A bean identifier, used for referring to the bean elsewhere in the context.
- [[nsa-method-security-metadata-source-use-expressions]]
- `use-expressions`::
- Enables the use of expressions in the `access` attributes of `<intercept-url>` elements rather than the traditional list of configuration attributes.
- Default: `false`
- If enabled, each attribute should contain a single Boolean expression.
- If the expression evaluates to `true`, access is granted.
- [[nsa-method-security-metadata-source-children]]
- === Child Elements of <method-security-metadata-source>
- The `<method-security-metadata-source>` element has a single child element: <<nsa-protect,protect>>.
- [[nsa-protect]]
- == <protect>
- 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".
- [[nsa-protect-parents]]
- === Parent Elements of <protect>
- The `<protect>` element has two parent elements:
- * <<nsa-intercept-methods,intercept-methods>>
- * <<nsa-method-security-metadata-source,method-security-metadata-source>>
- [[nsa-protect-attributes]]
- === <protect> Attributes
- The `<protect>` element has the following attributes:
- [[nsa-protect-access]]
- `access`::
- Access configuration attributes list that applies to the method -- for example,
- `ROLE_A,ROLE_B`.
- [[nsa-protect-method]]
- `method`::
- A method name.
|