Struts2的系统怎么做到同一帐号不能多人登陆?后登陆的可以把先登陆的挤掉?

Struts2的系统怎么做到同一帐号不能多人登陆?后登陆的可以把先登陆的挤掉?
我用的session是这种,
Map session = ActionContext.getContext().getSession();
也没有通过sessionID来找到这个session的方法啊。
别说啥session.clear()啊。总得先得到再clear吧。直接clear只会clear掉你自己的。不能强制别人下线。
 
 思路是这样的。每个用户登陆成功的时候获取他的sessionId 并且把他的用户名当做key  sessionId当做value来存到Application里
  (也就是容器里。Application是一个容器共用一个)
  具体实现:

  import com.opensymphony.xwork2.ActionContext;

  ActionContext ac = ActionContext.getContext();
  Map sessionMap = ac.getSession();
  Map applicationMap = ac.getApplication();//struts2 吧application这些对象做了封装 所以你对这个map操作也就是对Application操作。(如果你不习惯这样做 也可以用原始的方法)

  application..put(你的用户名, sessionId );
  并且要在session里存入你的用户名。
  sessionMap.put("username", 你的用户名 );
  ---------------------------------------------

  如果有账号登录了。先去applicationMap里找一下。看这个账户有没有登陆
  String lu = applicationMap.get(username);

  if(lu == null){
  在applicationMap 里存入相应信息。也就是上面的代码
  } else{
  如果不等于空,就获取自己的sessionId 然后放入application里把之前的登陆的那个session覆盖掉。

  application..put(username, mySessionId );这里的mySessionId 是自己的sessionId

  }

  这样做了以后 你要修改你的程序,在每次请求的时候都去你的session里找到你的用户名(在登陆的时候已经保存了)
  Srtring username = sessionMap.get("username")

  然后在application里找到
  String sessionId = applicationMap.get(username );

  在从你session里获取mySessionId 和 sessionId 对比。

  如果一样 就继续  如果不一样就跳转到登陆页面。

  你可以不修改程序。而去写一个Interceptor,在里面拦截每个请求。这样更方便。

  PS:上面的代码里用到struts2 封装的一些session。。等
  如果用的不习惯 可以换一下,就写成原始获取session的方法也行。
文章来自:http://zhidao.baidu.com/question/98349521.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值