由于遗留原因,我们使用的是servlet-api-2.3.jar,其中HttpServletRequest
尚未使用logout
方法。我该怎么做?我们也使用了旧版本的Oracle ATG,其中包含一个名为DynamoHttpServletRequest的类,但我不知道如何处理它。尝试/阅读什么?
答案 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);
}
}
我希望这有助于解释原因。