public class AnnotationParameterNameDiscoverer
extends java.lang.Object
implements org.springframework.core.ParameterNameDiscoverer
Annotation instances. This is useful when needing to discover the parameter
names of interfaces with Spring Security's method level security. For example, consider
the following:
import org.springframework.security.access.method.P;
@PostAuthorize("#to == returnObject.to")
public Message findMessageByTo(@P("to") String to);
We can make this possible using the following AnnotationParameterNameDiscoverer
:
ParameterAnnotationsNameDiscoverer discoverer = new ParameterAnnotationsNameDiscoverer(
"org.springframework.security.access.method.P");
It is common for users to use AnnotationParameterNameDiscoverer in conjuction
with PrioritizedParameterNameDiscoverer. In fact, Spring Security's
DefaultSecurityParameterNameDiscoverer (which is used by default with method
level security) extends PrioritizedParameterNameDiscoverer and will
automatically support both P and Spring Data's Param annotation if it is found
on the classpath.
It is important to note that if a single parameter name has a supported annotation on
it then all methods are resolved using AnnotationParameterNameDiscoverer. For
example, consider the following:
import org.springframework.security.access.method.P;
@PostAuthorize("#to == returnObject.to")
public Message findMessageByToAndFrom(@P("to") User to, User from);
The result of finding parameters on the previous sample will be
new String[] { "to", null} since only a single parameter contains an
annotation. This is mostly due to the fact that the fallbacks for
PrioritizedParameterNameDiscoverer are an all or nothing operation.
DefaultSecurityParameterNameDiscoverer| Constructor and Description |
|---|
AnnotationParameterNameDiscoverer(java.util.Set<java.lang.String> annotationClassesToUse) |
AnnotationParameterNameDiscoverer(java.lang.String... annotationClassToUse) |
| Modifier and Type | Method and Description |
|---|---|
java.lang.String[] |
getParameterNames(java.lang.reflect.Constructor<?> constructor) |
java.lang.String[] |
getParameterNames(java.lang.reflect.Method method) |
public AnnotationParameterNameDiscoverer(java.lang.String... annotationClassToUse)
public AnnotationParameterNameDiscoverer(java.util.Set<java.lang.String> annotationClassesToUse)
public java.lang.String[] getParameterNames(java.lang.reflect.Method method)
getParameterNames in interface org.springframework.core.ParameterNameDiscovererpublic java.lang.String[] getParameterNames(java.lang.reflect.Constructor<?> constructor)
getParameterNames in interface org.springframework.core.ParameterNameDiscoverer