【问题标题】:Servlet session invalidateServlet 会话无效
【发布时间】:2011-04-29 14:22:15
【问题描述】:

我在 2 个不同的服务器上有 2 个应用程序 - Tomcat(基本上是一个 .WAR 文件)和 jBoss 中的一个 EAR。

EAR 是一个可重用的应用程序,我将在其中验证用户并将控制权发送回 Tomcat 上的应用程序。在进行身份验证时,我正在 jBoss 应用程序上创建一个会话对象。

当我将控件发送回 Tomcat 上的应用程序时,我会询问用户是否要注销身份验证应用程序。如果用户按下“是”按钮,我将不得不从身份验证应用程序中注销该用户

问题

1) 我读到过滤器是使会话无效的最佳方法。在我的情况下,由于身份验证应用程序旨在供超过 1 个用户使用,过滤器如何知道它需要使哪个会话失效?

2) 我是否应该将在 jBoss 应用程序中创建的会话 ID 传递给 Tomcat 应用程序,以便当用户决定注销时 - 我需要将相同的会话 ID 传递回 jBoss 应用程序以使过滤器失效?

【问题讨论】:

    标签: java servlets


    【解决方案1】:

    您不需要过滤器。一个简单的 Servlet 就可以了:

    public LogoutServlet extends HttpServlet {
        @Override
        public void doGet(...) {
           request.getSession().invalidate();
        }
    }
    

    然后将这个servlet映射到web.xml中的/lougout,每当用户想注销时,都应该发送到http://youhost/yourapp/logout

    如果你想在他已经在使用 tomcat 服务器时注销他,你需要重定向回 JBoss 服务器以使那里的会话无效。

    请注意,request.getSession() 获取 当前 会话 - 即属于发出请求的用户的会话。您的 servlet 容器(服务器)会为您处理。

    【讨论】:

    • 没关系,但我将如何跟踪请求来自哪个用户?我是否需要传递会话 ID(我知道这样做不安全)。
    • @sv1 - 这由服务器跟踪。 request.getSession() 给出当前会话。
    • 谢谢!。我相信这对跨不同应用程序服务器的任意数量的用户都应该有好处。
    猜你喜欢
    • 2013-01-04
    • 2013-03-14
    • 2012-12-07
    • 2019-06-19
    • 1970-01-01
    • 2013-08-09
    • 2018-08-05
    • 1970-01-01
    相关资源
    最近更新 更多