Переменные сеанса в ServletRequest

Мне нужно получить доступ к переменным сеанса через фильтр. Я даже не знаю, возможно ли это. На практике проблема заключается в том, что тип метода doFilter из реализации javax.Servlet.Filter равен ServletRequest, в то время как классы, унаследованные от HttpServlet, параметром метода doPost request является HttpServletRequest.

  1. Могу ли я получить доступ к сеансу в ServletRequest в фильтре?
  2. Должен ли я это сделать?
  3. Что бы вы могли мне порекомендовать?

Спасибо!


person Alex    schedule 21.02.2013    source источник
comment
HttpServletRequest request = (HttpServletRequest) methodRequest; Вы можете привести запрос doFilter к HttpServletRequest.   -  person Sotirios Delimanolis    schedule 21.02.2013


Ответы (2)


Просто приведите полученный ServletRequest к HttpServletRequest.

@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
    HttpServletRequest request = (HttpServletRequest) req;
    HttpSession session = request.getSession(false);
    // ...
}

Смотрите также:

person BalusC    schedule 21.02.2013
comment
ты прав. Я так часто бросаю ServletRequest на HttpServletRequest, что забыл упомянуть об этом. - person AlexR; 22.02.2013

Что вы можете. ServletRequest позволяет вам получить доступ к сеансу, который содержит атрибуты. Вы можете просматривать, добавлять, удалять и изменять атрибуты, когда захотите, либо в фильтре, сервлете, jsp, прослушивателе сеанса. Этот метод очень полезен и особенно важен для связи между различными компонентами в рамках одного сеанса.

person AlexR    schedule 21.02.2013
comment
Интерфейс ServletRequest не имеет метода getSession() . В противном случае ОП не задал бы этот вопрос в первую очередь. - person BalusC; 21.02.2013