Страницы

Поиск по вопросам

пятница, 13 декабря 2019 г.

Spring-Security Как получить авторизованного пользователя

#java #spring #hibernate #spring_security #j2ee


Всем привет! Как можно получить авторизованного пользователя, т.е после авторизации
извлечь обьект данного юзера из БД к примеру для того чтобы заполнить поля на его странице
профиля, DAO у меня реализован с помощью hibernate и сама авторизация выполняется из
БД. Заранее спасибо!
    


Ответы

Ответ 1



Для этого сначала нужно получить имя юзера из spring-security public String getCurrentUsername() { Authentication auth = SecurityContextHolder.getContext().getAuthentication(); return auth.getName(); } и передать его в hibernate public User getUserByUsername(String username) { CriteriaQuery criteriaQuery = em.getCriteriaBuilder().createQuery(User.class); Root userRequest = criteriaQuery.from(User.class); Expression exp = userRequest.get("username"); Predicate predicate = exp.in(username); criteriaQuery.where(predicate); try { return em.createQuery(criteriaQuery).getSingleResult(); } catch (NoResultException e) { return new User(); } }

Ответ 2



Начиная с Spring-Security 3.2 удобнее воспользоваться аннотацией @AuthenticationPrincipal на аргументе метода вашего контроллера. ModelAndView someRequestHandler(@AuthenticationPrincipal User user) { // ... } User - это именно спринговый юзер, а не тот объект, который вы кладете в БД. Чтобы это работало, нужно зарегистрировать бин AuthenticationPrincipalArgumentResolver: при использовании Java-конфигурации - повесть аннотацию @EnableWebMvcSecurity на ваш @Configuration-бин; при использовании xml-конфигурации - зарегистрировать его в :

Комментариев нет:

Отправить комментарий