如果使用struts2拦截器在浏览器中打开新选项卡,则会使用户的会话到期

时间:2014-02-05 10:03:51

标签: java jsp session struts2

我的申请是在struts2。

我要求我在会话中存储我的应用程序详细信息。我无法从会话中删除这些属性。登录后,我必须选择要处理的对象。现在我打开一个新选项卡并选择另一个对象进行工作。由于我的第一个对象值被覆盖。因此,如果在我的第一个标签中我做了一些工作,则会针对该操作更新错误信息。

这就是我计划解决问题的方法。

我试图在拦截器类的setter方法中设置一个值,但是我无法在index.jsp中访问该值。

在所有动作上调用此拦截器,index.jsp也包含在每个jsp中。

我将维护一个哈希表,它将存储用户ID和一个包含40个字符的随机字符串。此id将是唯一的,我将在将jsp中存在的值与存储在hastable中的值进行比较后更新userid。

如果我发现该值匹配,那么我将生成另一个值并存储在jsp和hastable中。如果值不匹配,我将销毁会话。

请告知我如何进行或有任何其他工作来实现同样的目标。

拦截器类

String strFrom = (String)aContext.get(ServletActionContext.ACTION_NAME);
HttpServletRequest httpReq = (HttpServletRequest)aContext.get(ServletActionContext.HTTP_REQUEST);
HttpSession session = httpReq.getSession();

String sessionValue = (String)httpReq.getSession().getAttribute("sessionValue");

String test = httpReq.getParameter("sessionValue");
if(strFrom.equals("ValidateUser")){
        // Do nothing
}else if(sessionValue == null && strFrom.equals("HomePage")){
      session.setAttribute("sessionValue", getRandomString(20));
}else if (sessionValue.equals(session.getAttribute("sessionValue"))){
      session.setAttribute("sessionValue", getRandomString(20));
}else{
            httpReq.setAttribute("message","Session Expired. Please Login Again");
            return "loginAgain";
    }

的index.jsp

<body>
<s:hidden id="hidBidType" value="%{#session.tenderBidType}"/>
<s:property value="%{#session.sessionValue}"/>
<s:hidden name="sessionValue" id="sessionValue" value="%{#session.sessionValue}"/>
</body>

的login.jsp

<form name="loginPage" method="post">
<s:hidden name="sessionValue" id="sessionValue" value="1"/>
</form>

1 个答案:

答案 0 :(得分:0)

对于随机生成的40个字符的值,为什么不使用时间戳?

嗯,我看不到你的方法有多大的优点(当然,我可能是错的)。您仍然可以注册SessionListener并检查用户是否有会话,不是吗?所以,你真的需要做所有这些事情取决于你,但我不会这样做 - 所有页面的拦截器,在页面中存储值,检查是否相同...只需注册一个SessionListener并将您的用户ID或一些otrher用户的唯一值放入会话,比较和销毁会话(或您需要的)。

希望这有帮助。

<强> EDITED 我正在开发一个具有类似要求的Web应用程序。我们所做的(并且我确定不是最佳选择)是在没有导航栏的情况下打开新窗口并关闭登录窗口之后。然后我们捕获窗口上的所有事件并禁用许多功能,如ctrl + tab,右键单击等。在此应用程序中,不允许用户打开多个窗口。我再说一遍 - 这可能不是最好的选择。只是一个想法。