java 实现 一个账号只能在一个地方登陆,其他地方被下线

王朝学院·作者佚名  2016-05-28
窄屏简体版  字體: 小  |  中  |  大  |  超大  

java 实现 一个账号只能在一个地方登陆,其他地方被下线其实方法有很多的,我这献丑了。

使用理解java 四大作用域。

思路:理解java 四大作用域的关键。

第一个地方登陆:

1.得到请求的sessionId 和 登陆的 用户名

2.把SessionId 存到application里,用户名存到当前session里

ActionContext ac = ActionContext.getContext(); Map<String, Object> applicationMap=ac.getApplication(); Map<String, Object> sesisonMap = ac.getSession();//请求的sessionId String currentSeesionId= getRequest().getSession().getId(); applicationMap.put(loanUserE.getUname(), currentSeesionId); sesisonMap.put(CommonVar.SSO_LOGIN_NAME_KEY,loanUserE.getUname());

第二个地方登陆:

1.获取浏览器的 SessionId 和取得 登陆的用户名

2.在当前的session 里取得 用户名对应的关键字 ,用关键字在application里获取SessionId ,

作比较,不相等就跳到登陆。

拦截器: /** 初始化参数获得 */ ActionContext actionContext = arg0.getInvocationContext(); /** HttpServletRequest参数 */ HttpServletRequest request = (HttpServletRequest) actionContext.get(StrutsStatics.HTTP_REQUEST); /** HttpServletResponse参数 */ HttpServletResponse response = (HttpServletResponse) actionContext.get(StrutsStatics.HTTP_RESPONSE); /** Session参数 */ Map<String, Object> sessionMap = actionContext.getSession(); Map<String, Object> appcationMap = actionContext.getApplication(); String loginName = null; // 上下文对象中的sessionId String sessionId = null; if (!sessionMap.isEmpty()) { loginName = (String) sessionMap.get(CommonVar.SSO_LOGIN_NAME_KEY); } if (null != loginName) { sessionId = (String) appcationMap.get(loginName); } // 当前会话的sessionId String currentSessionId = request.getSession().getId(); if (!currentSessionId.equals(sessionId)) { return "loanUserLogin"; }

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航