zoukankan      html  css  js  c++  java
  • 项目单点登录

     void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain){
            doBeforeSsoFilter(req, resp); //过滤前预处理,抽象方法,子类可实现
            
            HttpServletRequest request = (HttpServletRequest)req;
            HttpServletResponse response = (HttpServletResponse)resp;
            
            if (request.getRequestURL() != null && isexclusion(request.getRequestURL().toString())) //检查url是否为null或是被忽略不进行过滤的
            {
                chain.doFilter(req, resp);
                return;
            }
            
            if (isDownloadToolUser)
            {
                doDownloadToolActions(request);  //如果是下载请求就执行下载
            } 
            else
            {
                String ssoInfo = SsoFilterUtil.getCookieValueByName(request, SsoFilterConstants.SSO_TOKEN_KEY); //获取token Cookie
                String ssoInfoSub = SsoFilterUtil.getCookieValueByName(request, SsoFilterSubConstants.SSO_TOKEN_KEY); //获取子应用自定义token Cookie
                
                if (ssoInfo != null && ssoInfo.length() > 0 || ssoInfoSub != null && ssoInfoSub.length() > 0) 
                {
                    if (!isUserLogin(request)) //token有效并且没有登录过该应用(如果有session,并且里面的用户信息bean里保存的uid值和解密cookie里保存的uid值一致就认为用户已经登录了。)
                    {
                        if (rebuildSession(request) || rebuildSessionBySub(request))//从单点登录服务器获取UserInfoBean复制进本应用的session中(具体方法很复制,用到了websphere的jar包以及RMI通讯接口)
                        {
                            doAfterSsoInfoBuilt(req, resp);
                            
                        } else  // 如果复制失败(有可能是用户类型不合要求,单点登录服务器上没用户登录记录,或者登录信息uid对比不一致)
                        {
                            clearSsoInfo(request, response); //清空登录信息 1移出session中可能的UserInfoBean,2 添加cookie SSO_TOKEN_KEY 值"" ,3 添加cookie LOGIN_FLAG 值 "out"
                            doAfterSsoInfoCleared(request, response)   //清理后处理逻辑,抽象方法,子类可实现
                            redirect2Login(request, response, "0"); //重定向到单点登录服务器去登录,并把当前URL作为参数传过去。
                        }
                    }
                } 
                else //如果没有SSO_TOKEN_KEY的cookie就转到单点登录页面
                {
                    clearSsoInfo(request, response); 
                    doAfterSsoInfoCleared(request, response);
                    redirect2Login(request, response, "0");
                }
            }
            doOthersInFilter(req, resp);  //其他过滤逻辑,抽象方法,子类可实现
            
            String currentURL = SsoUtil.getRequestURLWithParas(request); //将post的参数全加到url上来
           
            if (currentURL != null && currentURL.indexOf(SsoFilterConstants.SSOTIME4UPDATE_URL) != -1)
            {
                if (isUserLogin(request))
                {
                    updateSsoTime(request, response);//更新单点登录响应时间(添加LOGIN_LASTEST_TIME cookie ,值取当前时间戳并加密)
                }
                return;
            } else
            {
                chain.doFilter(req, resp);
                return;
            }
    
        }

    这是单点登录的其他需要用到单点登录的应用端的逻辑,单点登录服务器的代码没在我这个项目的jar包里,暂时还未找到

  • 相关阅读:
    apache22与mod_mono
    设计模式之行为型模式
    jquery实现excel导出
    桥本分数式问题的C++算法
    [深入浅出iOS库]之图形库Core Plot
    HDU 1069 Monkey and Banana
    程序员咋学习
    JavaSocket通信(双向,有界面)
    BZOJ 3098(Hash Killer II生日攻击)
    [置顶] iPhone 5S及iWatch或将采用指纹验证技术
  • 原文地址:https://www.cnblogs.com/onlywujun/p/2853300.html
Copyright © 2011-2022 走看看