2013-09-21 75 views
3

我们需要从主应用程序转到Vendor登录页面。如果会话有效,那么主应用程序中选择的数据在供应商页面中可见,我们正在会话中存储数据。 对于处理这个问题,在Tomcat中,我们在Vendor login jsp的起始处有以下代码。session.invalidate()在Websphere Application Server中不起作用

request.getSession().invalidate(); 

我们现在正在迁移到Websphere Application Server。相同的代码在WAS中不起作用。 我们正在获取IllegalStateException。我读过的地方是WAS通过cookies处理会话。因此,如果会话已经失效,则会引发IllegalStateException。

我将代码更改为WAS: userId是我在主应用程序的会话中保存的用户标识。

if ((request.getSession() != null) && (request.getSession().getAttribute("userId") != null)) { // Old session 
    request.getSession().invalidate(); 
} 

即使控制if条件里面去,这是给IllegalStateException异常。 对于我们的要求,我有一个替代方法可以在供应商登录jsp开始时删除所有会话参数,以便通过任何内容。但为此,我必须逐个删除每个参数(将近20个)。并且在将来我会保存会话中的任何新参数,我必须更新这个jsp。

是否有任何解决方案使整个会话首先失效,如果它是旧的?

+0

如果session已经过期,那么这行会引发异常if(request.getSession()。getAttribute(“userId”)!= null) – SpringLearner

+0

对不起,我没有正确提到,我也在检查会话之前检查会话为用户ID。我已经更新了这个问题。 –

+0

我建议你去LISTENER。 – SpringLearner

回答

0

我没有尝试,但你可以尝试这样的事情。

if ((request.getSession() != null) && 
      (request.isRequestedSessionIdValid()) { 
    request.getSession().invalidate(); 
} 
+0

为什么以及这是如何工作的? – Mark

+0

@Mark ** – SpringLearner

+0

@javaBeginner的用法我只是重新格式化了代码,并没有真正阅读它 - 它看起来像应答者试图突出显示它,并使这一点大胆 – Mark

1

经过一番研究,看起来应该没问题。

HttpSession session = req.getSession(false); 
    if(session == null){ 
     //valid session doesn't exist 
     //do something like send the user to a login screen 
    } 
    if(session.getAttribute("username") == null){ 
     //no username in session 
     //user probably hasn't logged in properly 
    } 

    //now lets pretend to log the user out for good measure 
    session.invalidate(); 

Here is the link

2

我们解决了在下面的代码的问题。

<%@page session="false"%> 

<% 
    HttpSession session = request.getSession(); 
    if (session!=null) { 
     session.invalidate(); 
    } 
%> 

我们在主登录jsp和供应商登录jsp中都添加了这段代码。所以每次加载jsp时都会自动创建HTTP会话(http://docs.oracle.com/cd/A97688_16/generic.903/bp/j2ee.htm#1008677)。然后我们明确地创建一个会话。此代码现在可以在Websphere Application Server中完美工作。

相关问题