zoukankan      html  css  js  c++  java
  • 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"; }
  • 相关阅读:
    Objective-C 关于锁的种类
    iOS多线程编程Part 1/3
    isa基础知识
    block学习笔记
    关于GCD使用
    iOS开发多线程篇—NSOperation基本操作
    iOS开发多线程篇—基础知识 NSOperation
    iOS开发多线程篇—单例模式(ARC)
    iOS开发多线程篇—GCD的常见用法
    OS开发多线程篇—线程间的通信
  • 原文地址:https://www.cnblogs.com/loveweiwei/p/4139668.html
Copyright © 2011-2022 走看看