0

现在用户在他的权限中有许多角色,我将允许他单击 href 并在新窗口中扮演另一个角色。每个角色都有自己的会话。

由于浏览器打开窗口无法打开新会话,我必须在服务器端找到一种方法。

但是 request 不支持 request.createSession 或 request.setSession(new Session()),我怎样才能为这个用例分离一个新的会话?

4

2 回答 2

0

您可以通过HttpSession#invalidate old session 创建一个新会话,但不能保留旧会话。愿以下几点对您有所帮助

  1. 您提到每个角色都有自己的会话
  2. 当用户单击一个角色时,使当前会话(也是角色)无效并且将创建新会话
  3. 如有必要,提供一个链接以返回他以前的角色
  4. 如果他回到以前的角色,请重复步骤 2。
于 2013-11-04T09:29:20.880 回答
0

你没有来自tomcat的支持。你必须自己这样做。

下一个策略不适用于集群的 tomcat。这里没有保证。

更改为新会话

  1. 遍历会话属性getAttributeNames()并将getAttribute(String)它们全部添加到HashMap.
  2. 将其序列HashMap化为临时文件或静态并发映射,以供您稍后访问。还存储当前HttpServletRequest.getRequestURL()用于以后的重定向。你必须序列化。
  3. 再次遍历会话属性和removeAttribute(String)所有属性。
  4. 将访问文件或并发映射的密钥添加到会话。
  5. 将用户重定向到登录页面或综合添加会话所需的所有授权。

恢复到旧会话

  1. 检查用户是否有访问旧会话的密钥。如果他或她这样做,反序列化HashMap.
  2. 如果反序列化有效,请遍历会话和removeAttribute(String)所有内容
  3. HashMapsetAttribute(String, Object)在会议上。
  4. 将用户重定向到在步骤 2 中以某种方式存储的 URL。

我懒得编写代码并自己测试它,但我认为这会奏效。

于 2013-11-04T10:03:29.650 回答