ÀÖÓãµç¾º

  • ½ÌÓýÐÐÒµA¹ÉIPOµÚÒ»¹É£¨¹ÉƱ´úÂë 003032£©

    È«¹ú×Éѯ/ͶËßÈÈÏߣº400-618-4000

    µ¥µãµÇ¼µÄʵÏÖ

    ¸üÐÂʱ¼ä:2019Äê01ÔÂ10ÈÕ14ʱ54·Ö À´Ô´:ÀÖÓã²¥¿Í ä¯ÀÀ´ÎÊý:

    ¡¡¡¡Ê²Ã´Êǵ¥µãµÇ¼£º

    ¡¡¡¡Single Sign On£¬¼ò³ÆÎª SSO£¬ÊÇĿǰ±È½ÏÁ÷ÐÐµÄÆóÒµÒµÎñÕûºÏµÄ½â¾ö·½°¸Ö®Ò»¡£SSOµÄ¶¨ÒåÊÇÔÚ¶à¸öÓ¦ÓÃϵͳÖУ¬Óû§Ö»ÐèÒªµÇ¼һ´Î¾Í¿ÉÒÔ·ÃÎÊËùÓÐÏ໥ÐÅÈεÄÓ¦ÓÃϵͳ¡£

    ¡¡¡¡1 µ¥µãµÇ¼µÄÁ÷³Ì

    ¡¡¡¡Óû§·ÃÎÊϵͳ1µÄÊܱ£»¤×ÊÔ´£¬ÏµÍ³1·¢ÏÖÓû§Î´µÇ¼£¬Ìø×ªÖÁssoÈÏÖ¤ÖÐÐÄ£¬²¢½«×Ô¼ºµÄµØÖ·×÷Ϊ²ÎÊý

    ¡¡¡¡ssoÈÏÖ¤ÖÐÐÄ·¢ÏÖÓû§Î´µÇ¼£¬½«Óû§Òýµ¼ÖÁµÇÂ¼Ò³Ãæ

    ¡¡¡¡Óû§ÊäÈëÓû§ÃûÃÜÂëÌá½»µÇ¼ÉêÇë

    ¡¡¡¡ssoÈÏÖ¤ÖÐÐÄУÑéÓû§ÐÅÏ¢£¬´´½¨Óû§ÓëssoÈÏÖ¤ÖÐÐÄÖ®¼äµÄ»á»°£¬³ÆÎªÈ«¾Ö»á»°£¬Í¬Ê±´´½¨ÊÚȨÁîÅÆ

    ¡¡¡¡ssoÈÏÖ¤ÖÐÐÄ´ø×ÅÁîÅÆÌø×ª»á×î³õµÄÇëÇóµØÖ·(ϵͳ1)

    ¡¡¡¡ÏµÍ³1Äõ½ÁîÅÆ£¬È¥ssoÈÏÖ¤ÖÐÐÄУÑéÁîÅÆÊÇ·ñÓÐЧ

    ¡¡¡¡ssoÈÏÖ¤ÖÐÐÄУÑéÁîÅÆ£¬·µ»ØÓÐЧ£¬×¢²áϵͳ1

    ¡¡¡¡ÏµÍ³1ʹÓøÃÁîÅÆ´´½¨ÓëÓû§µÄ»á»°£¬³ÆÎª¾Ö²¿»á»°£¬·µ»ØÊܱ£»¤×ÊÔ´

    ¡¡¡¡Óû§·ÃÎÊϵͳ2µÄÊܱ£»¤×ÊÔ´

    ¡¡¡¡ÏµÍ³2·¢ÏÖÓû§Î´µÇ¼£¬Ìø×ªÖÁssoÈÏÖ¤ÖÐÐÄ£¬²¢½«×Ô¼ºµÄµØÖ·×÷Ϊ²ÎÊý

    ¡¡¡¡ssoÈÏÖ¤ÖÐÐÄ·¢ÏÖÓû§ÒѵǼ£¬Ìø×ª»ØÏµÍ³2µÄµØÖ·£¬²¢¸½ÉÏÁîÅÆ

    ¡¡¡¡ÏµÍ³2Äõ½ÁîÅÆ£¬È¥ssoÈÏÖ¤ÖÐÐÄУÑéÁîÅÆÊÇ·ñÓÐЧ

    ¡¡¡¡ssoÈÏÖ¤ÖÐÐÄУÑéÁîÅÆ£¬·µ»ØÓÐЧ£¬×¢²áϵͳ2

    ¡¡¡¡ÏµÍ³2ʹÓøÃÁîÅÆ´´½¨ÓëÓû§µÄ¾Ö²¿»á»°£¬·µ»ØÊܱ£»¤×ÊÔ´

    ¡¡¡¡Óû§µÇ¼³É¹¦Ö®ºó£¬»áÓëssoÈÏÖ¤ÖÐÐļ°¸÷¸ö×Óϵͳ½¨Á¢»á»°£¬

    ¡¡¡¡Óû§ÓëssoÈÏÖ¤ÖÐÐĽ¨Á¢µÄ»á»°³ÆÎªÈ«¾Ö»á»°£¬Óû§Óë¸÷¸ö×Óϵͳ½¨Á¢µÄ»á»°³ÆÎª¾Ö²¿»á»°£¬

    ¡¡¡¡¾Ö²¿»á»°½¨Á¢Ö®ºó£¬Óû§·ÃÎÊ×ÓϵͳÊܱ£»¤×ÊÔ´½«²»ÔÙͨ¹ýssoÈÏÖ¤ÖÐÐÄ£¬

    ¡¡¡¡È«¾Ö»á»°Óë¾Ö²¿»á»°ÓÐÈçÏÂÔ¼Êø¹ØÏµ¡£

    ¡¡¡¡¾Ö²¿»á»°´æÔÚ£¬È«¾Ö»á»°Ò»¶¨´æÔÚ¡£

    ¡¡¡¡È«¾Ö»á»°´æÔÚ£¬¾Ö²¿»á»°²»Ò»¶¨´æÔÚ¡£

    ¡¡¡¡È«¾Ö»á»°Ïú»Ù£¬¾Ö²¿»á»°±ØÐëÏú»Ù¡£

    ¡¡¡¡2 µ¥µã×¢Ïú£º

    ¡¡¡¡Óû§Ïòϵͳ1·¢Æð×¢ÏúÇëÇó

    ¡¡¡¡ÏµÍ³1¸ù¾ÝÓû§Óëϵͳ1½¨Á¢µÄ»á»°idÄõ½ÁîÅÆ£¬ÏòssoÈÏÖ¤ÖÐÐÄ·¢Æð×¢ÏúÇëÇó

    ¡¡¡¡ssoÈÏÖ¤ÖÐÐÄУÑéÁîÅÆÓÐЧ£¬Ïú»ÙÈ«¾Ö»á»°£¬Í¬Ê±È¡³öËùÓÐÓôËÁîůע²áµÄϵͳµØÖ·

    ¡¡¡¡ssoÈÏÖ¤ÖÐÐÄÏòËùÓÐ×¢²áϵͳ·¢Æð×¢ÏúÇëÇó

    ¡¡¡¡¸÷×¢²áϵͳ½ÓÊÕssoÈÏÖ¤ÖÐÐĵÄ×¢ÏúÇëÇó£¬Ïú»Ù¾Ö²¿»á»°

    ¡¡¡¡ssoÈÏÖ¤ÖÐÐÄÒýµ¼Óû§ÖÁµÇÂ¼Ò³Ãæ£¬×¢Ïú³É¹¦

    ¡¡¡¡3 µ¥µãµÇ¼µÄʵÏÖ£º

    ¡¡¡¡sso²ÉÓÿͻ§¶Ë/·þÎñ¶Ë¼Ü¹¹£¬ÎÒÃÇÏÈ¿´sso-clientÓësso-serverҪʵÏֵŦÄÜ(ÏÂÃæ£ºssoÈÏÖ¤ÖÐÐÄ=sso-server)

    ¡¡¡¡1 sso-client£º

    ¡¡¡¡À¹½Ø×ÓϵͳδµÇ¼Óû§ÇëÇó£¬Ìø×ªÖÁssoÈÏÖ¤ÖÐÐÄ

    ¡¡¡¡½ÓÊÕ²¢´æ´¢ssoÈÏÖ¤ÖÐÐÄ·¢Ë͵ÄÁîÅÆ

    ¡¡¡¡Óësso-serverͨÐÅ£¬Ð£ÑéÁîÅÆµÄÓÐЧÐÔ

    ¡¡¡¡½¨Á¢¾Ö²¿»á»°

    ¡¡¡¡À¹½ØÓû§×¢ÏúÇëÇó£¬ÏòssoÈÏÖ¤ÖÐÐÄ·¢ËÍ×¢ÏúÇëÇó

    ¡¡¡¡½ÓÊÕssoÈÏÖ¤ÖÐÐÄ·¢³öµÄ×¢ÏúÇëÇó£¬Ïú»Ù¾Ö²¿»á»°

    ¡¡¡¡2 sso-server£º

    ¡¡¡¡ÑéÖ¤Óû§µÄµÇ¼ÐÅÏ¢

    ¡¡¡¡´´½¨È«¾Ö»á»°

    ¡¡¡¡´´½¨ÊÚȨÁîÅÆ

    ¡¡¡¡Óësso-clientͨÐÅ·¢ËÍÁîÅÆ

    ¡¡¡¡Ð£Ñésso-clientÁîÅÆÓÐЧÐÔ

    ¡¡¡¡ÏµÍ³×¢²á

    ¡¡¡¡½ÓÊÕsso-client×¢ÏúÇëÇó£¬×¢ÏúËùÓлỰ

    ¡¡¡¡1 ÔÚ×ÓϵͳÖÐʹÓÃfilterÀ¹½ØÇëÇó£¬ÔÚsso-clientÖÐн¨LoginFilter.javaÀಢʵÏÖFilter½Ó¿Ú£¬ÔÚdoFilter()·½·¨ÖмÓÈë¶ÔδµÇ¼Óû§µÄÀ¹½Ø

          
    [Java] ´¿Îı¾²é¿´ ¸´ÖÆ´úÂë
    ?
    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
          HttpServletRequest req = (HttpServletRequest) request;
          HttpServletResponse res = (HttpServletResponse) response;
          HttpSession session = req.getSession();
          if (session.getAttribute("isLogin")) { public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,         ServletException {
            HttpServletRequest req = (HttpServletRequest) request;
            HttpServletResponse res = (HttpServletResponse) response;
            HttpSession session = req.getSession();
            if (session.getAttribute("isLogin")) {
            chain.doFilter(request, response);
                return;
            }
          //Ìø×ªÖÁssoÈÏÖ¤ÖÐÐÄ
          res.sendRedirect("sso-server-url-with-system-url");
          }
              chain.doFilter(request, response);
              return;
          }
          //Ìø×ªÖÁssoÈÏÖ¤ÖÐÐÄ
          res.sendRedirect("sso-server-url-with-system-url");
          }

       ¡¡¡¡2¡¢sso-serverÀ¹½ØÎ´µÇ¼ÇëÇó

    ¡¡¡¡À¹½Ø´Ósso-clientÌø×ªÖÁssoÈÏÖ¤ÖÐÐĵÄδµÇ¼ÇëÇó£¬Ìø×ªÖÁµÇÂ¼Ò³Ãæ£¬Õâ¸ö¹ý³ÌÓësso-clientÍêȫһÑù

    ¡¡¡¡3¡¢sso-serverÑéÖ¤Óû§µÇ¼ÐÅÏ¢

    ¡¡¡¡Óû§ÔÚµÇÂ¼Ò³ÃæÊäÈëÓû§ÃûÃÜÂ룬ÇëÇóµÇ¼£¬ssoÈÏÖ¤ÖÐÐÄУÑéÓû§ÐÅÏ¢£¬Ð£Ñé³É¹¦£¬½«»á»°×´Ì¬±ê¼ÇΪ“ÒѵǼ”

    [Java] ´¿Îı¾²é¿´ ¸´ÖÆ´úÂë
    ?
    1
    2
    3
    4
    5
    6
    @RequestMapping("/login")
     public String login(String username, String password, HttpServletRequest req) {
         this.checkLoginInfo(username, password);
         req.getSession().setAttribute("isLogin", true);
         return "success";
     }

    ¡¡¡¡4¡¢sso-server´´½¨ÊÚȨÁîÅÆ

    ¡¡¡¡ÊÚȨÁîÅÆÊÇÒ»´®Ëæ»ú×Ö·û£¬ÒÔʲôÑùµÄ·½Ê½Éú³É¶¼Ã»ÓйØÏµ£¬Ö»Òª²»Öظ´¡¢²»Ò×αÔì¼´¿É£¬ÏÂÃæÊÇÒ»¸öÀý×Ó£º

    [Java] ´¿Îı¾²é¿´ ¸´ÖÆ´úÂë
    ?
    1
    String token = UUID.randomUUID().toString();

    ¡¡¡¡5¡¢sso-clientÈ¡µÃÁîÅÆ²¢Ð£Ñé

    ¡¡¡¡ssoÈÏÖ¤ÖÐÐĵǼºó£¬Ìø×ª»Ø×Óϵͳ²¢¸½ÉÏÁîÅÆ£¬×Óϵͳ(sso-client)È¡µÃÁîÅÆ£¬È»ºóÈ¥ssoÈÏÖ¤ÖÐÐÄУÑ飬ÔÚLoginFilter.javaµÄdoFilter()ÖÐÌí¼Ó¼¸ÐÐ

    [Java] ´¿Îı¾²é¿´ ¸´ÖÆ´úÂë
    ?
    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
       // ÇëÇ󸽴øtoken²ÎÊý
       String token = req.getParameter("token");
       if (token != null) {
          // È¥ssoÈÏÖ¤ÖÐÐÄУÑétoken
          boolean verifyResult = this.verify("sso-server-verify-url", token);
          if (!verifyResult) {
              res.sendRedirect("sso-server-url");
              return;
          }
          chain.doFilter(request, response);
      }
    //verify()·½·¨Ê¹ÓÃhttpClientʵÏÖ£¬ÕâÀï½ö¼òÂÔ½éÉÜ£¬httpClientÏêϸʹÓ÷½·¨Çë²Î¿¼¹Ù·½Îĵµ  
       HttpPost httpPost = new HttpPost("sso-server-verify-url-with-token");
       HttpResponse httpResponse = httpClient.execute(httpPost);

    ¡¡¡¡6¡¢sso-server½ÓÊÕ²¢´¦ÀíУÑéÁîÅÆÇëÇó

    ¡¡¡¡Óû§ÔÚssoÈÏÖ¤ÖÐÐĵǼ³É¹¦ºó£¬sso-server´´½¨ÊÚȨÁîÅÆ²¢´æ´¢¸ÃÁîÅÆ£¬ËùÒÔ£¬sso-server¶ÔÁîÅÆµÄУÑé¾ÍÊÇÈ¥²éÕÒÕâ¸öÁîÅÆÊÇ·ñ´æÔÚÒÔ¼°ÊÇ·ñ¹ýÆÚ£¬ÁîÅÆÐ£Ñé³É¹¦ºósso-server½«·¢ËÍУÑéÇëÇóµÄϵͳע²áµ½ssoÈÏÖ¤ÖÐÐÄ(¾ÍÊÇ´æ´¢ÆðÀ´µÄÒâ˼)

    ¡¡¡¡ÁîÅÆÓë×¢²áϵͳµØÖ·Í¨³£´æ´¢ÔÚkey-valueÊý¾Ý¿â(Èçredis)ÖУ¬redis¿ÉÒÔΪkeyÉèÖÃÓÐЧʱ¼äÒ²¾ÍÊÇÁîÅÆµÄÓÐЧÆÚ¡£redisÔËÐÐÔÚÄÚ´æÖУ¬Ëٶȷdz£¿ì£¬ÕýºÃsso-server²»ÐèÒª³Ö¾Ã»¯ÈκÎÊý¾Ý¡£

    ¡¡¡¡ÁîÅÆÓë×¢²áϵͳµØÖ·¿ÉÒÔÓÃÏÂͼÃèÊöµÄ½á¹¹´æ´¢ÔÚredisÖУ¬¿ÉÄÜÄã»áÎÊ£¬ÎªÊ²Ã´Òª´æ´¢ÕâЩϵͳµÄµØÖ·?Èç¹û²»´æ´¢£¬×¢ÏúµÄʱºò¾ÍÂé·³ÁË£¬Óû§ÏòssoÈÏÖ¤ÖÐÐÄÌá½»×¢ÏúÇëÇó£¬ssoÈÏÖ¤ÖÐÐÄ×¢ÏúÈ«¾Ö»á»°£¬µ«²»ÖªµÀÄÄЩϵͳÓôËÈ«¾Ö»á»°½¨Á¢ÁË×Ô¼ºµÄ¾Ö²¿»á»°£¬Ò²²»ÖªµÀÒªÏòÄÄЩ×Óϵͳ·¢ËÍ×¢ÏúÇëÇó×¢Ïú¾Ö²¿»á»°

    ¡¡¡¡3b221593-f9c4-45af-a567-4937786993e8

    ¡¡¡¡7¡¢sso-clientУÑéÁîÅÆ³É¹¦´´½¨¾Ö²¿»á»°

    ¡¡¡¡ÁîÅÆÐ£Ñé³É¹¦ºó£¬sso-client½«µ±Ç°¾Ö²¿»á»°±ê¼ÇΪ“ÒѵǼ”£¬ÐÞ¸ÄLoginFilter.java£¬Ìí¼Ó¼¸ÐÐ

        if (verifyResult) {
            session.setAttribute("isLogin", true);
        }
    ¡¡¡¡¡¡sso-client»¹Ð轫µ±Ç°»á»°idÓëÁîÅÆ°ó¶¨£¬±íʾÕâ¸ö»á»°µÄµÇ¼״̬ÓëÁîÅÆÏà¹Ø£¬´Ë¹ØÏµ¿ÉÒÔÓÃjavaµÄhashmap±£´æ£¬±£´æµÄÊý¾ÝÓÃÀ´´¦ÀíssoÈÏÖ¤ÖÐÐÄ·¢À´µÄ×¢ÏúÇëÇó

    ¡¡¡¡8¡¢×¢Ïú¹ý³Ì

    ¡¡¡¡Óû§Ïò×Óϵͳ·¢ËÍ´øÓГlogout”²ÎÊýµÄÇëÇó(×¢ÏúÇëÇó)£¬sso-clientÀ¹½ØÆ÷À¹½Ø¸ÃÇëÇó£¬ÏòssoÈÏÖ¤ÖÐÐÄ·¢Æð×¢ÏúÇëÇó

         
    [Java] ´¿Îı¾²é¿´ ¸´ÖÆ´úÂë
    ?
    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    String logout = req.getParameter("logout");
    if (logout != null) {
        this.ssoServer.logout(token);
    }
    //ssoÈÏÖ¤ÖÐÐÄÒ²ÓÃͬÑùµÄ·½Ê½Ê¶±ð³össo-clientµÄÇëÇóÊÇ×¢ÏúÇëÇ󣨴øÓГlogout”²ÎÊý£©£¬ssoÈÏÖ¤ÖÐÐÄ×¢ÏúÈ«¾Ö»á»°
    @RequestMapping("/logout")
    public String logout(HttpServletRequest req) {
        HttpSession session = req.getSession();
        if (session != null) {
            session.invalidate();//´¥·¢LogoutListener
        }
        return "redirect:/";
    }
    //ssoÈÏÖ¤ÖÐÐÄÓÐÒ»¸öÈ«¾Ö»á»°µÄ¼àÌýÆ÷£¬Ò»µ©È«¾Ö»á»°×¢Ïú£¬½«Í¨ÖªËùÓÐ×¢²áϵͳעÏú  
    public class LogoutListener implements HttpSessionListener {
        @Override
        public void sessionCreated(HttpSessionEvent event) {}
        @Override
        public void sessionDestroyed(HttpSessionEvent event) {}
    }



    ×÷ÕߣºÀÖÓã²¥¿ÍJavaEEÅàѵѧԺ

    Ê×·¢£ºhttp://java.itcast.cn

    0 ·ÖÏíµ½£º
    ºÍÎÒÃÇÔÚÏß½»Ì¸£¡
    ¡¾ÍøÕ¾µØÍ¼¡¿¡¾sitemap¡¿