gpt4 book ai didi

xpages - SessionListener sessionDestroyed 未调用

转载 作者:行者123 更新时间:2023-12-02 08:34:34 26 4
gpt4 key购买 nike

看来我在 XPages 中的 SessionListener 实现遇到了困难。创建 session 时,监听器将输出打印到日志中,因此我知道它已正确注册。但是,它不会在注销时调用 sessionDestroyed。我需要执行任何特殊的 URL 重定向才能在注销时立即销毁 Domino/XPage session 吗?正如你所看到的,我尝试过清除范围,并清除 cookie 来尝试触发 sessionDestroyed 方法。请注意,当我重新启动 http 服务器任务时,sessionDestroyed 确实会被调用,因此 session 可能会一直持续到不活动超时。

开发服务器是:9.0.1(64位,在Win7上本地运行)运行基于 session 的身份验证单服务器(注意:我尝试了基本身份验证,同样的问题)

注销实用方法(由 SSJS 调用):

    public static void logout(){


String url = XSPUtils.externalContext().getRequestContextPath() + "?logout&redirectto=" + externalContext().getRequestContextPath();
XSPUtils.getRequest().getSession(false).invalidate();

//wipe out the cookies
for(Cookie cookie : getCookies()){
cookie.setValue("");
cookie.setPath("/");
cookie.setMaxAge(0);
XSPUtils.getResponse().addCookie(cookie);
}

try {
XSPUtils.externalContext().redirect(url);
} catch (IOException e) {
logger.log(Level.SEVERE,null,e);
}
}

简单 session 监听器:

public class MySessionListener implements SessionListener {

public void sessionCreated(ApplicationEx arg0, HttpSessionEvent event) {
System.out.println("***sessionCreated***");

}

public void sessionDestroyed(ApplicationEx arg0, HttpSessionEvent event) {
System.out.println("***sessionDestroyed***");
}

}

最佳答案

我们正在考虑将传统的 http 堆栈“?logout”行为与 XPage 运行时 session 管理层结合起来。目前, session 根据 session 超时到期和/或 http 堆栈重新启动而被丢弃。如果您想强制删除 session 并调用 SessionListener.sessionDestroyed,请参阅以下 XSP 片段 - 这同样适用于移植到 Java 中:

<xp:button value="Logout" id="button2">
<xp:eventHandler event="onclick" submit="true"
refreshMode="complete">
<xp:this.action>
<![CDATA[#{javascript:
// things we need...
var externalContext = facesContext.getExternalContext();
var request = externalContext.getRequest();
var response = externalContext.getResponse();
var currentContext = com.ibm.domino.xsp.module.nsf.NotesContext.getCurrent();
var session = request.getSession(false);
var sessionId = session.getId();

// flush the cookies and invalidate the HTTP session...
for(var cookie in request.getCookies()){
cookie.setValue("");
cookie.setPath("/");
cookie.setMaxAge(0);
response.addCookie(cookie);
}
session.invalidate();

// now nuke the XSP session from RAM, then jump to logout...
currentContext.getModule().removeSession(sessionId);
externalContext.redirect("http://foo/bar.nsf?logout");
}]]>
</xp:this.action>
</xp:eventHandler>
</xp:button>

关于xpages - SessionListener sessionDestroyed 未调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21910980/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com