sso單點登陸

1.什麼是單點登陸(SSO)?簡而言之,就是一個公司旗下的多個相互信任的項目,只須要登陸其中的一個,其餘的都默認登陸。好比,你在網頁上登陸新浪微博,再打開新浪博客,你會發現,你已經登陸新浪博客了,這就是單點登陸的魅力。跨域

2.如何實現單點登陸?你要訪問一個網站,他會檢查你的身份合格不合格,若是不合格,就讓你去登陸,若是合格,就放行。那麼你登陸的身份信息保存在哪裏呢?就在一個叫作cookie的容器裏,因此說,單點登陸,就是和cookie做鬥爭,並且須要一個統一的登陸接口。因此掌握cookie、寫好了統一登陸接口就等於掌握了單點登陸!服務器

3.單點登陸分爲同域單點登陸、同父域、跨域。那麼什麼叫域?舉個例子:https://a.x.com,其中com就是一級域,x就是二級域。同域就是後綴名如出一轍的在同一個應用裏面的。例如https://a.x.com/insert   和https://a.x.com/update 就是同域操做。什麼叫同父域?https://a.x.com和https://b.x.com就是同父域,父就是x。跨域是什麼你們就明白了吧!cookie

4.同域如何實現單點登陸?就是你登陸以後就要獲取到一張票,接下來你再去訪問相關的網站,這張票就能夠用!請看代碼:app

 @RequestMapping("/addCookie")
    public String addCookie(HttpServletResponse response){
        Cookie cookie=new Cookie("sso","sso");
        response.addCookie(cookie);
        return null;
    }

5.同父域如何實現?與同域不一樣的是,在寫入身份信息(cookie)的時候,注意要將cookie的位置定義爲父級(x域),此時任何子域都能共享同一個父域的cookie,請看代碼:網站

@RequestMapping("/addCookie")
    public String addCookie(HttpServletResponse response){
        Cookie cookie=new Cookie("sso","sso");
        cookie.setDomain(".x.com");
        cookie.setPath("/");
        response.addCookie(cookie);
        return null;
    }

其中的重點是,要把cookie的域設置爲父域(注意不能少一個點),其次要把cookie路徑設置爲根路徑url

6.跨域實現單點登陸,跨域如何實現單點登陸?撓破腦殼也想不到。由於你cookie怎麼都不能寫在不一樣的域。那應該怎麼辦呢?我想到了相互信任。跨域就好像,你在我這邊登陸了,我錄入了你的身份信息。我沒辦法在個人朋友那裏按着他的腦殼讓他也給你記錄身份信息,給你經過,可是我和我朋友互相信任,我只要告訴他,嘿,兄弟,這個小哥在我這裏已經登陸了,你那邊也別攔着他了。OK了。那這個就涉及到服務器間的通訊。請看代碼(代碼與單點登陸無關,單純的服務器之間的通訊):spa

public class Demo1Tool {
    public static String check(String urll, Map<String,String> map) {
        HttpURLConnection httpURLConnection=null;
        try {
            URL url=new URL(urll);
            httpURLConnection=(HttpURLConnection)url.openConnection();
            httpURLConnection.setRequestMethod("GET");
            httpURLConnection.connect();
            InputStream inputStream=httpURLConnection.getInputStream();
            InputStreamReader inputStreamReader=new InputStreamReader(inputStream);
            BufferedReader bufferedReader=new BufferedReader(inputStreamReader);
            String temp=null;
            while ((temp=bufferedReader.readLine())!=null){
                stringBuffer.append(temp);
            }
            bufferedReader.close();
            inputStreamReader.close();
            inputStream.close();
        }catch (IOException io){
            System.out.println(io);
        }finally {
            if(httpURLConnection!=null){
                httpURLConnection.disconnect();
            }
        }
        return stringBuffer.toString();
    }
相關文章
相關標籤/搜索