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";
        }
时间: 2024-11-02 21:04:09

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

用java实现一个简单的单用户登陆功能的思路

引用 所谓"单用户单账户登录"是指:在同一系统中,一个用户名不能在两个地方同时登录. 我们参照 QQ 实现效果:当某账号在 A 处登录后,在未退出的情况下,如果再到 B 处登录,那么,系统会挤下 A 处登录的账号. 要实现这样一个功能,如果我们项目使用了springmvc我们可以使用拦截器来替代过滤器,否则我们使用过滤器也可以实现,我们需要一个这样的东西来进行拦截用户的请求.我们的user表里也需要添加一个token字段,用于存放当前登录者的一个唯一标识. 大致的思路是这样的: 用户A

PHP实现一个账号只能一个用户登录

思路: 用户登录时,将函数session_id()的值写入到数据库中,这样就能始终保证数据库中的session_id的值是最新的登录的用户对应的session _id. 在页面验证用户时,需要验证用户当前的session_id和数据库中session的值是否一致. 举例: 已知有一个账号U,两个用户A和B. 首先A登录账号U,于是用户A登录时,对应的session_id写入到账号U对应的session_id中,此时用户A保持登录状态. 然后B也登录账号U,用户B登录时,对应的session_id

Asp.net 实现只能允许一个账号同时只能在一个地方登录

先上帮助类: /// <summary> /// 单点登录帮助类 /// </summary> public class SSOHelper { /// <summary> /// 登录后执行 /// </summary> /// <param name="UserID">用户标识</param> public void LoginRegister(string UserID) { Hashtable hOnlin

关于同一个用户只能有一个账号登陆的方法

此种情况分两种办法,第一种是后面的踢掉前面的,另外一个是后面的不能登陆.前面一种很好实现,对于后面一种要稍微复杂些.

FineReport:任意时刻只允许在一个客户端登陆账号的插件

在使用FineReport报表系统中,处于账户安全考虑,有些企业希望同一账号在任意时刻智能在统一客户端登录.那么当A用户在C1客户端登陆后,该账号又在另外一个C2客户端登陆,服务器如何取判断呢? 开发原理 当服务器在得知A在C1登陆后,在cookie里面写入一个标识ID~将浏览器标记,然后以后的访问自然就能够根据匹配用户名和对应的标记来确定这个用户是不是在换浏览器登陆了,当匹配到用户异地登陆,就要把之前已经登陆的用户先登出,再登陆新请求的用户.当然关闭页面事件里要向后台先发送一个请求,后台要记得

如何限制一个账号同时只能一个人登录

一直以为 限制一个账号同时只能一个人登录 就是单点登录,经过网上查询,一个账号同一时间只能一个人登录和单点登录根本不是一回事. 解决思路: 在数据库中创建一个内存表LoginTable(即数据库存储引擎为membory),包含两个字段(id,loginStr).其中loginStr 用来存储 sessionId.将主键id不要设置成自增的方式. 在创建用户的时候,在内存表LoginTable中添加一条数据,字段id为新建用户在用户表中的主键id,字段loginStr 先设为空 在用户登录成功之后

There is no session with id session多人使用一个账号

1.问题场景:在dev和test环境开发时候,分配的账号是多人共用的,当一个人修改权限后,调用shiro的清楚服务器sesionId后,当其他人再次修改权限信息时候,由于服务器的sessionId已经被全部清空,就会报 There is no session with id "XXX"的问题 2.解决方式:网上说的一般是由于SESSIONID和比如tomcat/jetty等使用的sessionId同名导致的,这个是一个原因.不过我的原因是由于服务器所有的sessionId被清空了导致的

java编程中&#39;为了性能&#39;一些尽量做到的地方

java编程中'为了性能'一些尽量做到的地方 2011-08-16 14:34:59|  分类: JAVA |  标签:java编程  缓存经常使用的对象  |举报|字号 最近的机器内存又爆满了,出了新增机器内存外,还应该好好review一下我们的代码,有很多代码编写过于随意化,这些不好的习惯或对程序语言的不了解是应该好好打压打压了. 下面是参考网络资源和总结一些在java编程中尽可能做到的一些地方- 1.尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并

java 加入一个线程、创建有响应的用户界面 。 示例代码

javajava 加入一个线程.创建有响应的用户界面 . 示例代码 来自thinking in java 4 21章  部分代码  目录21.2.11 thinking in java 4免费下载:http://download.csdn.net/detail/liangrui1988/7580155 package org.rui.thread.concurrent; /** * 加入一个线程 * 一个线程可以在其他线程之上调用join()方法,其效果是等待一段时间直到第二个线程结束才继续执行