Моя цель состоит в том, чтобы перехватить ServletResponse с помощью фильтра и добавить некоторый пользовательский html к нему, прежде чем он появится на веб-странице. Я также хочу сделать некоторые вычисления и добавить результаты в переменную сеанса HashMap, к которой я смогу получить доступ при последующем вызове.
Я не могу понять, как получить сеанс из ServletRequest внутри метода doFilter. Вот мой код:
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
CountingServletResponse counter = null;
try {
HttpServletResponse httpResp = (HttpServletResponse) response;
counter = new CountingServletResponse(httpResp);
counter.addHeader("UniqueId", String.valueOf(counter.getUniqueId()));
HttpServletRequest httpReq = (HttpServletRequest) request;
HttpSession session = httpReq.getSession(); //this throws error
//I want to add session variable here
chain.doFilter(request, response);
counter.flushBuffer(); // Push the last bits containing HTML comment.
} catch (Throwable t) {
t.printStackTrace();
}
}
Строка с getSession throws
java.lang.IllegalStateException: невозможно создать сеанс после
ответ был принят
и если я получаю getSession (false), то он проходит через эту строку, но session == null, и я не могу добавить переменные сеанса.
Идеи?