У меня есть перечисление со значениями разрешения: < /p>
public enum Permission {
DASHBOARD_OPEN("dashboard:open");
private final String key;
Permission(String key) {
this.key = key;
}
@Override
public String toString() {
return key;
}
}
< /code>
, который я хочу использовать в мета-аннотации: < /p>
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@PreAuthorize("hasAuthority('{value}')")
public @interface HasPermission {
Permission value();
}
< /code>
нравится это: < /p>
@HasPermission(DASHBOARD_OPEN)
@RequestMapping({"/dashboard",})
public String dashboard() {
return "dashboard";
}
< /code>
Это не работает, я получаю 403 ошибки, независимо от того, как я пытаюсь это настроить. {value} не работает, {value.key} не работает, и я также попробовал все возможные перестановки. Я проверил, и у моего пользователя есть соответствующий орган. Если я не использую эту мета-аннотация, то моя страница доступна, хотя: < /p>
@PreAuthorize("hasAuthority('dashboard:open')") //
Что я делаю не так? Как я могу сделать Enum решение для решения (в отличие от прохождения строки s)?@Target({ ElementType.METHOD, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@PreAuthorize("hasRole('{value}')")
public @interface HasRole {
String value();
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... g-spring-s