HttpServletRequest在旧的servlet-api-2.3.jar上注销

时间:2013-12-11 14:57:27

标签: java servlets legacy

由于遗留原因,我们使用的是servlet-api-2.3.jar,其中HttpServletRequest尚未使用logout方法。我该怎么做?我们也使用了旧版本的Oracle ATG,其中包含一个名为DynamoHttpServletRequest的类,但我不知道如何处理它。尝试/阅读什么?

3 个答案:

答案 0 :(得分:2)

这取决于您的应用程序中登录的语义。

通常情况下,除非你做一些异国情调,否则应该这样做:

request.getSession().invalidate();

我不熟悉Dynamo,所以你可能想看看它是否有任何关于会话管理的细节,就像一些框架那样。

如果您使用的是任何安全框架,则可能需要清除/取消验证身份验证令牌。

答案 1 :(得分:0)

atg.servlet.ServletUtil.invalidateSessionNameContext(request, atg.servlet.ServletUtil.getCurrentRequest().getSession(false));
atg.servlet.ServletUtil.invalidateSession(request, atg.servlet.ServletUtil.getCurrentRequest().getSession(false));
// Redirect, the profile is null from here on.
response.sendRedirect("login");

答案 2 :(得分:0)

我也遇到了这个问题,并在ATG documentation中找到了这个问题:

  

某些应用程序服务器在同一客户端(浏览器)的Web应用程序之间维护单个会话ID,在这种情况下,会话名称上下文ID是当前Web应用程序的会话ID。此行为由/ atg / dynamo /控制   servlet / sessiontracking / GenericSessionManager.singleSessionIdPerUser属性,在DafEar子模块配置层中设置为以下默认值之一:

     
      
  • WebLogic - false< -
  •   
  • JBoss - true
  •   
  • WebSphere - true
  •   
     

注意:请勿更改默认值中的这些值。

这意味着在jboss和websphere上你可以安全地使用session.invalidate()但是在WebLogic上你需要使用以下内容:

protected void forceLogout(DynamoHttpServletRequest pRequest) {
    HttpSession session= pRequest.getSession(false);
    if (session != null ) {
        // When ATG runs on weblogic you need to ensure the parent session is invalidated
        // session.invalidate() does not work.
        atg.servlet.ServletUtil.invalidateSession(pRequest, session);
    }
}

我希望这有助于解释原因。