весенняя охрана. отображать имя пользователя на каждой странице - PullRequest
4 голосов
/ 03 сентября 2010

Я хочу сохранить информацию о пользователе после входа в систему и отображать мой логин и имя пользователя на каждой странице (используя jsp). Как я могу получить доступ в моих представлениях jsp к сессионному компоненту, который будет хранить информацию о пользователе, который вошел в систему?

Ответы [ 3 ]

10 голосов
/ 03 сентября 2010

используйте тег аутентификации

Этот тег обеспечивает доступ к текущему объекту аутентификации, хранящемуся в контексте безопасности.Он отображает свойство объекта непосредственно в JSP.Так, например, если основным свойством Authentication является экземпляр объекта UserDetails Spring Security, тогда используйтеотобразит имя текущего пользователя.

Конечно, нет необходимости использовать теги JSP для такого рода вещей, и некоторые люди предпочитают сохранять как можно меньше логики в представлении.Вы можете получить доступ к объекту аутентификации в вашем контроллере MVC (вызвав SecurityContextHolder.getContext (). GetAuthentication ()) и добавить данные непосредственно в вашу модель для рендеринга представлением.

3 голосов
/ 03 сентября 2010

Я предполагаю, что вы используете пружинную безопасность.После успешного входа в систему поместите объект UserDetails в сеанс следующим образом (обычно это контроллер, куда вы перешли бы, если бы вход был успешным)

Object principal = SecurityContextHolder.getContext()
     .getAuthentication().getPrincipal();
HttpSession session = request.getSession(true); //create a new session

// put the UserDetails object here.
session.setAttribute("userDetails", principal);

В вашем JSP вы можете получить доступ к объекту UserDetails, например так:

<span class="message">Welcome ${userDetails.username}</span>
1 голос
/ 03 сентября 2010

Это почти дубликат При использовании Spring Security, как правильно получить информацию о текущем имени пользователя (т.е. SecurityContext) в бине? .Одобренный Spring метод -

final String currentUser = SecurityContextHolder.getContext().getAuthentication().getName();

, но у связанного обсуждения есть альтернативы.

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