Class AnnotationParameterNameDiscoverer

  • All Implemented Interfaces:
    org.springframework.core.ParameterNameDiscoverer

    public class AnnotationParameterNameDiscoverer
    extends java.lang.Object
    implements org.springframework.core.ParameterNameDiscoverer
    Allows finding parameter names using the value attribute of any number of 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 conjunction 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.

    Since:
    3.2
    See Also:
    DefaultSecurityParameterNameDiscoverer
    • Constructor Detail

      • AnnotationParameterNameDiscoverer

        public AnnotationParameterNameDiscoverer​(java.lang.String... annotationClassToUse)
      • AnnotationParameterNameDiscoverer

        public AnnotationParameterNameDiscoverer​(java.util.Set<java.lang.String> annotationClassesToUse)
    • Method Detail

      • getParameterNames

        public java.lang.String[] getParameterNames​(java.lang.reflect.Method method)
        Specified by:
        getParameterNames in interface org.springframework.core.ParameterNameDiscoverer
      • getParameterNames

        public java.lang.String[] getParameterNames​(java.lang.reflect.Constructor<?> constructor)
        Specified by:
        getParameterNames in interface org.springframework.core.ParameterNameDiscoverer