@PreAuthorize аннотация, не распознающая ролевую коллекцию - PullRequest
0 голосов
/ 16 мая 2019

сегодня я обнаружил проблему с авторизацией JWT и аннотацией @PreAuthorize. А именно, существует проблема с поиском правильной роли при использовании @PreAuthorize.

Мой предыдущий метод getAuthorities () из класса SecurityUtil, например:

 public class SecurityUtil {

  private static String AUTHORITIES_KEY = "AUTHORITIES";

  public static UserPrincipal getPrinciple() {
    return (UserPrincipal) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
  }

  public static Set<GrantedAuthority> getAuthorities(Claims claims) {
    return Arrays.stream(claims.get(AUTHORITIES_KEY).toString().split(", "))
        .map(SimpleGrantedAuthority::new)
        .collect(Collectors.toSet());
  }
}

был добавлен дополнительный сборник, который мы видим на втором скриншоте в разделе полномочия -> роль. Это решение не распознавало роли по аннотации @PreAuthorize в контроллере. Более того, они окружены скобками.

New version

Old version

Первый снимок экрана текущего рабочего решения, которое, по моему мнению, требует оптимизации:

Вторая душа вроде:

public static Set<SimpleGrantedAuthority> getAuthorities(Claims claims) {
    return ((ArrayList<HashMap<String, String>>) claims.get(AUTHORITIES_KEY)).stream()
    .map(HashMap::values)
    .map(Object::toString)
    .map(s -> s.replace("[", "")
    .replace("]", ""))
    .map(SimpleGrantedAuthority::new)
    .collect(Collectors.toSet());
}

отлично работает для меня, но у меня есть два вопроса, а именно: Есть ли шанс украсить код, чтобы улучшить его оптимизацию и как избавиться от подсказки IntellJ, которая появляется в строке

((ArrayList<HashMap<String, String>>) claims.get(AUTHORITIES_KEY))

который звонит как:

Unchecked cast 'java.lang.Object' to 'java.util.ArrayList<java.util.HashMap<java.lang.String, java.lang.String>>

Спасибо за любую помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...