Мне нужно отображать зарегистрированное имя пользователя на любой странице. Можно ли использовать только 1 метод, который будет вызываться по любому запросу и добавит атрибут name в модель?
И да и нет. Либо вы сохраняете имя пользователя в сеансе (setRequestAtrributes), либо создаете цепочку фильтров, которая считывает имя пользователя с помощью токена аутентификации / аутентификации. В зависимости от того, где вы решите, какой пользователь вошел в систему.
Вы можете добавить Сервлетный фильтр, как показано ниже, которое добавляет имя пользователя в заголовок ответа.
@Component
public class MyFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
HttpServletResponse httpServletResponse = (HttpServletResponse) response;
HttpSession session = httpServletRequest.getSession();
if (session !=null&& session.getAttribute("username")!=null){
httpServletResponse.addHeader("username",httpServletRequest.getSession().getAttribute("username").toString() );
}
}
И используйте userName из ответа в своем пользовательском интерфейсе.
Поскольку вы добавили тег spring-security
в свой вопрос, поэтому, если вы хотите отображать зарегистрированного пользователя на любой странице, лучшим выбором будет использование spring-security
.
Сначала добавьте указанное ниже объявление на свою страницу jsp:
<%@ taglib prefix = "sec" uri = "http://www.springframework.org/security/tags"%>
Затем на вашей странице jsp мы можем использовать <sec:authentication property = "name"/>
, чтобы показать зарегистрированного пользователя на любой странице.
нет, но вам нужно проверить, может ли тег spring secure работать на Thymeleaf
этот код: «Зарегистрированный пользователь: <span sec: authentication = " name "> </span>» из официальной документации thymeleaf.org/doc/articles/springsecurity.html не работает, у меня есть только текст «Зарегистрированный пользователь:» без имени пользователя
по-прежнему не работает, и ваш первый код предназначен для jsp, второй (с <span> </span>) для Thymeleaf
@VadymBorys вы добавили связанные jar-файлы thymeleaf-extras-springsecurity3
? Странно, <span sec:authentication = "name"></span>
должен работать, не знаю почему не работает
Я сделал это с помощью Thymeleaf, но элемент html остается пустым. И если мне нужно добавить дополнительную информацию, например, последний раз в сети или что-то еще, в этом классе UserDetails нет?