【问题标题】:HttpServletRequest session expires while redirect in Microsoft Edge browser在 Microsoft Edge 浏览器中重定向时 HttpServletRequest 会话过期
【发布时间】:2019-12-09 02:21:00
【问题描述】:

我正在浏览器上尝试一些 URL,它在包括 IE 10 在内的所有浏览器上都运行良好,但是在 Microsoft Edge 上,它在执行 HttpServletResponse sendRedirect 时会失败,这会使 HttpServletRequest 会话过期并且不会出现预期的页面。 请帮助我们如何解决这个浏览器特定的重定向会话问题。

基本代码:

public class MyServlet extends HttpServlet {

 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        // some code where values are set in session 
        session.setAttribute(myAttribute, value);
        response.sendRedirect("https://qa.sys.com/MainPage.jsf");
 }

 public class MyFilter implements Filter {
     @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest)servletRequest;

        // myAttribute below comes null as request.getSession() is null 
        Boolean myAttribute = request.getSession().getAttribute(myAttribute);

 }

在日志中,我得到了这个异常:-

java.lang.IllegalStateException: Response already committed at weblogic.servlet.internal.ServletResponseImpl.objectIfCommitted(ServletResponseImpl.java:1861) at weblogic.servlet.internal.ServletResponseImpl.sendRedirect(ServletResponseImpl.java:961) at weblogic.servlet.internal.ServletResponseImpl.sendRedirect(ServletResponseImpl.java:956) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78) Truncated. see log file for complete stacktrace

【问题讨论】:

  • 请发布复制此问题的最小代码示例。

标签: java browser microsoft-edge servlet-filters


【解决方案1】:

您还可以使用 F12 开发工具检查 Edge 中的“网络”选项卡,看看控制台中是否有任何错误。此错误通常发生在一个 java servlet 在响应提交后尝试写入输出流(响应)时。你可以参考this thread 来了解为什么响应会被提交。

this blog中给出了解决方案,你也可以参考帖子中的示例代码:

最好确保在转发或重定向完成后没有内容添加到响应中以避免 IllegalStateException。可以通过在转发或重定向语句旁边包含 'return' 语句来完成。

我还找到了an answer,其中包含有关此问题的详细信息,您可以查看。

【讨论】:

  • 谢谢于舟,是不是和Edge浏览器有关联?比如sendredirect之后的return语句,如果没有给出那么就会导致Edge出现问题!
  • 它可能以某种方式链接到 Edge。我会尝试做一些研究,如果有什么发现我会发送反馈。现在,您可以尝试答案中的解决方案。
猜你喜欢
  • 1970-01-01
  • 2018-06-19
  • 1970-01-01
  • 2014-10-17
  • 2013-07-18
  • 1970-01-01
  • 1970-01-01
  • 2011-04-21
  • 2015-08-12
相关资源
最近更新 更多