Spring controller добавляет атрибут к любому запросу - PullRequest
0 голосов
/ 01 мая 2018

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

Ответы [ 3 ]

0 голосов
/ 02 мая 2018

Вы можете добавить Servlet Filter , как показано ниже, который добавляет userName в заголовок ответа .

@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 из ответа в вашем пользовательском интерфейсе.

0 голосов
/ 02 мая 2018

Поскольку в вашем вопросе добавлен тег spring-security, поэтому, если вы хотите показать зарегистрированного пользователя на любой странице, лучшим выбором будет использование spring-security.

Сначала добавьте объявление ниже на своей странице jsp:

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

Тогда на вашей странице jsp мы можем использовать <sec:authentication property="name"/>, чтобы показать зарегистрированного пользователя на любой странице.

0 голосов
/ 01 мая 2018

Да и нет. Либо вы сохраняете имя пользователя в сеансе (setRequestAtrributes), либо создаете цепочку фильтров, которая считывает имя пользователя по токену аутентификации / аутентификации. В зависимости от того, где вы решаете, какой пользователь вошел в систему.

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