Доступ к моему пользовательскому объекту пользователя на странице jsp с использованием безопасности spring 3

#java #spring #spring-mvc #spring-security

#java #spring #spring-mvc #spring-безопасность

Вопрос:

Я реализовал UserDetailsService , он возвращает экземпляр MyUser (который реализует UserDetails )

 public MyUser loadUserByUsername(String arg0)
  

Теперь я хочу получить доступ к своим пользовательским получателям / полям MyUser на своих страницах JSP, пока я получил это:

 ${pageContext.request.userPrincipal.name}
  

Но это разрешает доступ только к основному объекту. Как я могу получить доступ MyUser к объекту?

Ответ №1:

это просто на странице jsp, я добавил это :

 <%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>
...
<sec:authentication property="principal.firstname" /> 
  

Где принципал фактически является экземпляром MyUser, поэтому «firstname» может быть любым из моих пользовательских методов получения и установки

Ответ №2:

После анализа HTTPSesson, сразу после успешного входа в систему, я обнаружил, что существует атрибут с именем SPRING_SECURITY_CONTEXT . Например, мои пользовательские пользовательские данные имеют объект с именем user, который имеет свойство FirstName . В JSP значение этого свойства может быть достигнуто с помощью следующего:

 ${sessionScope.SPRING_SECURITY_CONTEXT.authentication.principal.user.firstName}
  

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

1. для меня ‘$ {sessionScope. SPRING_SECURITY_CONTEXT.authentication.principal.email}’ работал, как я также вижу, даже в теге ‘<sec:authentication property=»principal.firstname» />’ мы получаем ‘principal.firstname’

Ответ №3:

Если ваш MyUser объект реализован Principal , и вы размещаете его в сеансе http при успешном входе в систему, вы можете получить его из сеанса и привести его.


Вы могли AuthenticationSuccessHandler бы внедрить UserDetailsService туда свой и поместить его в сеанс.

Затем вы можете ввести свой AuthenticationSuccessHandler в UsernamePasswordauthenticationFilter который обрабатывает <form-login> элемент.

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

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

1. Я согласен на 100%, как мне «поместить его в http-сеанс при успешном входе в систему, вы могли бы получить его из сеанса и выполнить его».

2. @NimChimpsky пожалуйста, вставьте некоторые соответствующие части вашей конфигурации безопасности. Я отредактирую свой ответ немного подробнее.

3. спасибо за вашу помощь, у меня есть решение, я опубликую его.