Pasar varargs a Spring spEL provoca "No se puede encontrar el método en com.sun.proxy"

Intento escribir una clase personalizada para la evaluación de permisos, para que pueda usarse con Spring Security@PreAuthorize y Spring Expression Language como por ejemplo este (authority es solo un componente Spring normal con algunos nombres de roles):

@PreAuthorize("@permissionEvaluator.anyOfRoles(@authority.ADMIN)")

losPermissionEvaluator#anyOfRoles La declaración del método tiene el siguiente aspecto:

boolean anyOfRoles(String... roles)

Como se muestra, este método toma varargs de tipo String. Funciona bien cuando solo se pasa un parámetro (como en el ejemplo anterior) pero lo llama con más de un argumento, por ejemplo.

@PreAuthorize("@permissionEvaluator.anyOfRoles(@authority.ADMIN, @authority.USER)")

causas

org.springframework.expression.spel.SpelEvaluationException: EL1004E: Method call: Method anyOfRoles(java.lang.String,java.lang.String) cannot be found on com.sun.proxy.$Proxy132 type

ser arrojado Todavía funciona cuando se llama con una matriz de cadenas (básicamente lo mismo que varargs, que es solo azúcar sintáctico), como este:

@PreAuthorize("@permissionEvaluator.anyOfRoles(new String[] { @authority.ADMIN, @authority.USER })")

Traté de buscar información adicional sobre cómo pasar varargs con spEL, pero la documentación de Spring solo enigmáticamentemenciona en la documentación spEL que

Varargs también son compatibles.

¿Cuál podría ser la causa de esta excepción y hay otra solución alternativa que pasar la matriz en spEL?

Respuestas a la pregunta(1)

Su respuesta a la pregunta