我们需要从主应用程序转到供应商登录页面。如果会话有效,则在主应用程序中选择的数据在供应商页面中可见,我们将数据存储在会话中。为了处理这个问题,在 Tomcat 中,我们在 Vendor login jsp 的开头有以下代码。
request.getSession().invalidate();
我们现在正在迁移到 Websphere Application Server。相同的代码在 WAS 中不起作用。我们得到了 IllegalStateException。在某处我读到 WAS 通过 cookie 处理会话。因此,如果会话已经失效,则会引发 IllegalStateException。
我将 WAS 的代码更改为如下: userId 是我保存在主应用程序会话中的用户 ID。
if ((request.getSession() != null) && (request.getSession().getAttribute("userId") != null)) { // Old session
request.getSession().invalidate();
}
即使控制进入 if 条件,它也会给出 IllegalStateException。对于我们的要求,我有一种替代方法可以在供应商登录 jsp 的开头删除所有会话参数,以便不传递任何内容。但为此,我必须一个一个地删除每个参数(几乎有 20 个)。而且将来我将在会话中保存的任何新参数,我都必须更新这个jsp。
如果它是旧的,是否有任何解决方案首先使整个会话无效?