首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

struts2+拦截器兑现同一账户同一时间这能登陆一次

2012-07-01 
struts2+拦截器实现同一账户同一时间这能登陆一次思路:??? 1.在loginAction中定义一个静态的Map用来存放已

struts2+拦截器实现同一账户同一时间这能登陆一次

思路:

??? 1.在loginAction中定义一个静态的Map用来存放已登录用户名和用户的session.

???? private static Map<String,HttpSession > m=new HashMap<String,HttpSession>();

??? 2.在验证完用户名密码合法后,先获得这次请求的session,

???? HttpSession session = ServletActionContext.getRequest().getSession();

?? ??然后 判断此用户时候已经登录。如何判断?写一个方法:

? ? public boolean hasEnter(HttpSession s,String userName,Map<String,HttpSession > m){
????? ??boolean b=false;
?????? ?if(m.containsKey(userName)){


???????? ???b=true;
???? ?? ?}
???? ?return b;
???? }

???? 如果map中没有此用户的username,则放到map中,m.put(name, session);

???? 并session.setAttribute("name", name)

???? 如果有此用户,说明此用户正在线。那么通过HttpSession s2=(HttpSession)m.get(name)获取之前登录的session,和刚才产生的session对比sessionId是否相同session.getId().equals(s2.getId()),如果不相同则将之前的session给注销s2.invalidate(),并将新的session放到map中 m.put(name, session)。至此前一个用户就被踢了。怎样判断前一个用户被踢了呢,我之前提到再每次向map中方完后要session.setAttribute("name", name)

3.建一个拦截器拦截一般请求和ajax请求。

????? 拦截每一个请求是判断session.getAttribute("name")是否为空,为空则说明用户被踢或者session超时,则跳转到登录页面。不为空则放行。

?

思路很简单,我也做列子验证了一下!用拦截器的好处在于,可拦截一般请求和ajax请求,同时不必再去建session监听器,你超时我就把你拦下,没超时就放行。

?

说明一下:

IE8要使多个窗口不共用一个session,要在IE属性--目标-- 最后面加 -nomerge,如?? nternet Explorer\iexplore.exe" -nomerge

火狐这点不如IE,所以火狐的窗口都用的是一个session.

?

ok!回家吃饭···

?

热点排行