Оптимальный способ получения пользовательских ролей в Spring Security - PullRequest
0 голосов
/ 11 марта 2020

Мне нужно проверить права пользователя в моем контроллере, чтобы решить, какой список параметров отправляется в представление. Я знаю, что могу проверить, есть ли у конкретного пользователя определенные роли двумя способами:

  1. Метод 1 - Создать вспомогательный класс с кодом ниже: SecurityContextHolder.getContext (). getAuthentication (). getAuthorities (). stream () .anyMatch (grantAuthority -> grantAuthority.getAuthority (). equals (roleName));
  2. Метод 2 - добавить запрос HttpServletRequest в контроллер и затем req.isUserInRole ("ROLE_ADMIN")

Но какой путь лучше? Что касается меня, я считаю, что первый вариант более полезен, потому что я могу использовать его вне контроллера для внутренних целей.

    @RequestMapping(value = "/goal/edit/{id}", method = RequestMethod.GET)
    public String edit (@PathVariable Long id, Model model, RedirectAttributes redirect, HttpServletRequest req) {
        Goal goal = goalService.getById(id);

        //Method 1 
        User user = AuthUtils.getCurrentUser();

        //Medhod 2
        Boolean is_admin = req.isUserInRole("ROLE_ADMIN");

        Iterable<Role> roles = null;

        if (is_admin==true) {
            roles = roleService.getAll();
            }
            else roles = user.getRoles();

        model.addAttribute("goal", goal);
        model.addAttribute("roles", roles);
        return "goal_form";
    }

    public class AuthUtils {
    public static boolean hasRole (User user, String roleName)
        {
            return SecurityContextHolder.getContext().getAuthentication().getAuthorities().stream()
                    .anyMatch(grantedAuthority -> grantedAuthority.getAuthority().equals(roleName));
        }
    }

1 Ответ

0 голосов
/ 11 марта 2020

Как ответы AMA в комментарии :

Дело не в том, какой вы предпочитаете, какой вам нужен! нужно ли вам проверять роль пользователя вне контроллеров, если да, тогда вы правы в использовании первого, но если вам это не нужно вне контроллеров, второй способ быстрее

Мне нужно проверить роль пользователя вне контроллеров. Я буду использовать первый метод.

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