Контроллер Spring добавляет атрибут к любому запросу

Мне нужно отображать зарегистрированное имя пользователя на любой странице. Можно ли использовать только 1 метод, который будет вызываться по любому запросу и добавит атрибут name в модель?

1
0
183
3

Ответы 3

И да и нет. Либо вы сохраняете имя пользователя в сеансе (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"/>, чтобы показать зарегистрированного пользователя на любой странице.

Я сделал это с помощью Thymeleaf, но элемент html остается пустым. И если мне нужно добавить дополнительную информацию, например, последний раз в сети или что-то еще, в этом классе UserDetails нет?

Vadym Borys 02.05.2018 08:11

нет, но вам нужно проверить, может ли тег spring secure работать на Thymeleaf

lucumt 02.05.2018 08:17

этот код: «Зарегистрированный пользователь: <span sec: authentication = " name "> </span>» из официальной документации thymeleaf.org/doc/articles/springsecurity.html не работает, у меня есть только текст «Зарегистрированный пользователь:» без имени пользователя

Vadym Borys 02.05.2018 08:32

по-прежнему не работает, и ваш первый код предназначен для jsp, второй (с <span> </span>) для Thymeleaf

Vadym Borys 02.05.2018 08:48

@VadymBorys вы добавили связанные jar-файлы thymeleaf-extras-springsecurity3? Странно, <span sec:authentication = "name"></span> должен работать, не знаю почему не работает

lucumt 02.05.2018 08:52

Другие вопросы по теме