web开发中解决一个浏览器登录多个用户的方案

     以前项目中遇到过这样的情况,当时是这样解决的,这里记下来。



1,用户的保存
-----------------------------------------------------------------
用户统一存在存在session的一个map中,
map的key是用户的id,value是用户对象。
sesion.map.put("activeUserMap",map);




2,登录时的操作:
-----------------------------------------------------------------
当用户登录时,把这个用户加入到(1)的map中,这就相当于一个入口。没有登录的用户在session的map中也就
没有记录。
Map map = sesion.map.get("activeUserMap");
map.put("userId",user);

session中保存一个当前活跃的用户id(当前登录用户的id)
sesion.map.put("activeUserId",userId)
然后跳转到一个页面。




3,页面加一个js脚本
-----------------------------------------------------------------
页面获取session中的活跃用户id隐藏到某个控件中,
例如:
<intput type="hedden" name="activeUserId" value="${activeUserId}">
然后,页面加一个js的脚本,取得(2)中携带的活跃用户id,
获取页面所有的a标签,并把a标签的href中加上这个用户id,form的action也可以加上。

或者也可以在jsp手动吧每个标签后面加上这个活跃用户id




4,拦截器,判断用户是否登录
-----------------------------------------------------------------
拦截器中拦截需要用户登录的资源,获取当前带过来的活跃用户id,去(1)的session的map中查找这个用户id,
返回用户对象,如为空则代表用户没有登录,如果有值,把这个id覆盖session中的活跃用户id。

----------伪代码----------
int uid;//当前url带过来的用户id
Map map = sesion.map.get("activeUserMap");
Object obj = map.get(uid);
if(obj == null){
     //用户未登录或者,用户自己输入的url,跳到错误页面。
}else{
    //用户已登录,把当前带过来的用户id存到session中,覆盖活跃用户id
    sesion.map.put("activeUserId",uid);
    //转到action中进行处理,这里也可以将用户注入到action中,供后面action使用而不用再去。
}


把这个用户对象注入到action中,action中声明一个user属性及get...set方法,然后就转到action了,action中直接取user属性
当作当前登录用户来操作。(这里也可以让所有action实现一个接口,接口中有setUser方法就行,在拦截器中统一注入)。或者
可以不做这个操作,直接放行到action





---------------------------------------------结束分割线--------------------------------------------


就这么多了,不知道这个实不实用,以前就是这样做的。。。

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值