我有以下组合自定义注释与Springs @PreAuthorize注释
@RequestMapping(
produces = MimeTypeUtils.APPLICATION_JSON_VALUE + ";charset=UTF-8",
method = RequestMethod.GET)
@ResponseBody
@PreAuthorize(value = "hasRole('permitAll()')")
@ResponseStatus(HttpStatus.OK)
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Get {
@AliasFor(annotation = RequestMapping.class, attribute = "value")
String[] value() default {};
@AliasFor(annotation = PreAuthorize.class, attribute = "value")
String authorize() default "permitAll()";
}
我已经让以下客户使用它了
@Get(value = "/users", authorize = "hasRole('ROLE_GET_USERS')")
public List<User> retrieveUsers() {
// body
}
正如您所看到的,目的是允许@Get
注释的客户覆盖@PreAuthorize
,以便他们可以提供所需的角色。
到目前为止我还没有使用@AliasFor
出现任何问题,即使在此示例中@RequestMapping
正在运行,但不幸的是它并没有覆盖@PreAuthorize
的值,每个人都可以仍然访问资源,默认值为permitAll()
。
我首先想知道为什么这不起作用,第二,如果有可能使其有效?