此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
楼主【cs_kill_you】截止到2008-07-10 22:18:22的历史汇总数据(不包括此帖):
发帖的总数量:22                       发帖的总分数:340                      每贴平均分数:15                       
回帖的总数量:14                       得分贴总数量:0                        回帖的得分率:0%                       
结贴的总数量:21                       结贴的总分数:320                      
无满意结贴数:5                        无满意结贴分:100                      
未结的帖子数:1                        未结的总分数:20                       
结贴的百分比:95.45 %               结分的百分比:94.12 %                  
无满意结贴率:23.81 %               无满意结分率:31.25 %                  
值得尊敬

解决方案 »

  1.   

    spring-security有,呵呵。我想应该是登陆id做一个cache,每次新id登陆先查cache里面是否有
      

  2.   

    SSO - Single Sign On - The objective of SSO is to allow users access to all applications from one logon.1.单点登录的概念
    http://www-128.ibm.com/developerworks/cn/security/se-sso/index.html
    2.耶鲁大学开源实现
    http://www.ibm.com/developerworks/web/library/wa-singlesign/
    3.利用Sun包的实现
    http://www.ibm.com/developerworks/java/library/j-gss-sso/
    4.老外一实现单点登录的教程
    http://www.developertutorials.com/tutorials/java/single-sign-on/page1.html关于楼主的单用户在线处理方案:
    我的实现方案是做一个全局的在线用户管理模块(起名叫OUMM - Online-User Management Module)
    该模块作用是提供一个在线用户列表服务,其中"用户名+session id"为key,假定用户名全局唯一,value是“一个优先级+最后一次发送请求的时间”
    当用户X第一次登录时,X信息被记录,优先级别为0
    当另外一个X成功登录时,向OUMM中再添加一个X信息,设置优先级别为1(以后登录的用户优先级依次增加),同时提醒用户要采用的登录方案方案一:不登录,直接退出
    更新OUMM中的用户信息,将当前X的信息删除方案二:继续登录,与之前的用户同时存在
    直接进入系统,这时OUMM中用户信息就有两个,优先级别分别为0和1,后续登录者优先级2、3、4……方案三:继续登录,将之前的用户踢出系统
    OUMM中之前已经登录的X用户优先级别设置为-1,并把自己的优先级别设置为之前X用户的优先级别0
    如果在本次登录之前有N个登录用户,把他们的优先级别都设置为-1对于优先级别为-1的用户,当他们再次发请求时,告诉他们别人已经在别处登录,他已被强迫下线,可以让他们再次登录,同时删除OUMM中的用户信息如果这两个X用户反复登录,就跟QQ被盗时效果一样,反复登录,反复被强迫下线PS:
    1.在用户关闭浏览器或退出系统时,使用AJAX发送请求到服务器端,删除当前用户的登录信息
    2.OUMM的用户管理列表要做周期性的整理,将最后一次发送请求的时间与当前时间的差值,与服务器SESSION过期时间比较,删除那些已经超时的用户信息
      

  3.   

    可以用application保存用户信息实现
    用户信息包括:用户名,最后登录的sessionId,最后操作时间
    保存的key有2个
    application.setAttribute(username,User);
    application.setAttribute(sessionId,User);新用户登录,检查用户名是否已经在application里面,如果在,则检查日期是否已经超过设置的超时时间。
      如果成功,则设置User里面的最后sessionId为当前的。老用户,则检查sessionID对应的User里面的sessionId是否为当前,如果不等则强制退出。退出登录,则清理掉2个属性系统用一个线程,定期清理无用的username和sessionId的数据,避免垃圾数据占用内存。
      

  4.   

    上面的是不允许第二个登录,这个是第二个登录替换掉第一个。if(isLogin()){
      if(exists(username)){
        setLastSessionId();
        setLastAccessDatetime();
      }else{
        createNewAccount();
       }
    }else if(isNormalOperate()){
      if(isExpired()){
        logout();
      }else if(currentSessionId != User.lastSessionId){
        logout();
      }
    }
      

  5.   

    需要一个统一认证服务,比如可以用windows的AD,或者其他的目录服务,(符合LDAP协议)。