【问题标题】:Creating a link to logout for JSP为 JSP 创建注销链接
【发布时间】:2011-03-04 01:38:11
【问题描述】:

当用户登录到我的应用程序时,他提交了一个要通过 Servlet 处理的表单。 servlet 为用户创建一个会话。我将如何创建一个链接以便用户可以注销?我似乎无法直接链接到 Servlet。如何删除会话并链接回主页?

这是我可以做到的一种方式,但它似乎并不“正确”。 我可以链接回 index.jsp?logout=true。我的 index.jsp 将查看注销是否为真并删除会话。

还有其他方法吗?

【问题讨论】:

    标签: java jsp authentication servlets forms-authentication


    【解决方案1】:

    编写一个映射到/logout 的servlet,然后在doGet 中执行类似的操作:

    HttpSession session = request.getSession(false);
    if(session != null)
        session.invalidate();
    request.getRequestDispatcher("/index.jsp").forward(request,response);
    

    不管用户是否有会话,他们最终都会被重定向到index.jsp

    【讨论】:

    • 我试过了,但我得到了 404 错误。我的 servlet 在 web.xml 中正确映射,我的链接指向该 servlet。
    • 那么 URL 就是错误的 :) 当你在浏览器地址栏中直接输入它时它是否有效?您是否考虑了上下文路径?您了解相对 URL 的工作原理吗?
    【解决方案2】:

    我发现这样做最容易:

    <form method="link" action="logout.jsp">
        <input type="submit" value="Logout"/>
    </form>
    

    没有 logout.jsp 有这个:

    <%
    session.invalidate();
    response.sendRedirect("startpage.html");
    %>
    

    【讨论】:

      【解决方案3】:

      最简单的方法是创建一个这样的注销链接..

      <a href="logout.jsp">LogOut</a>
      

      并在“logout.jsp”中写下代码

      <%
      session.invalidate();
      response.sendRedirect("index.jsp");
      %>
      

      【讨论】:

        【解决方案4】:

        注销不是太严重。你可以有一个简单的 /logout.jsp 来结束会话。

        【讨论】:

          【解决方案5】:

          根据 cdietschrun 的回答,我将其变得更加紧凑:

          <%
          session.invalidate();
          response.sendRedirect(request.getContextPath());
          %>
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-02-15
            • 2012-09-17
            • 2018-07-31
            • 2015-02-06
            • 1970-01-01
            • 2014-05-31
            • 2016-03-09
            • 2011-06-15
            相关资源
            最近更新 更多