【发布时间】:2019-10-30 01:52:37
【问题描述】:
我的目标是使用过滤器拦截 ServletResponse,并在它显示在网页上之前添加一些自定义 html。我还想做一些计算并将结果添加到会话变量 HashMap 中,以便在后续调用中访问。
我不知道如何从 doFilter 方法中的 ServletRequest 获取会话。这是我的代码:
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 的行会抛出
java.lang.IllegalStateException: 之后无法创建会话 响应已提交
如果我执行 getSession(false),那么它会越过该行但 session == null 并且我无法添加任何会话变量。 想法?
【问题讨论】:
标签: java session servlets servlet-filters