您的位置:首页 > 其它

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

2014-06-04 14:11 302 查看
以前项目中遇到过这样的情况,当时是这样解决的,这里记下来。

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

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

就这么多了,不知道这个实不实用,以前就是这样做的。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐