#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. спасибо за вашу помощь, у меня есть решение, я опубликую его.