zoukankan      html  css  js  c++  java
  • 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。跨域是什么大家就明白了吧!

    4.同域如何实现单点登录?就是你登录之后就要获取到一张票,接下来你再去访问相关的网站,这张票就可以用!请看代码:

     @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路径设置为根路径

    6.跨域实现单点登录,跨域如何实现单点登录?挠破脑袋也想不到。因为你cookie怎么都不能写在不同的域。那应该怎么办呢?我想到了相互信任。跨域就好像,你在我这边登录了,我录入了你的身份信息。我没办法在我的朋友那里按着他的脑袋让他也给你记录身份信息,给你通过,但是我和我朋友互相信任,我只要告诉他,嘿,兄弟,这个小哥在我这里已经登录了,你那边也别拦着他了。OK了。那这个就涉及到服务器间的通信。请看代码(代码与单点登录无关,单纯的服务器之间的通信):

    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();
        }
  • 相关阅读:
    IE8下网页中的视频会遮挡住顶层DIV的解决办法
    Synchronized 偏向锁、轻量级锁、自旋锁、锁消除
    Lock的使用
    Synchronized与ReentrantLock区别总结(简单粗暴,一目了然)
    Java线程池 面试题(精简)
    Java 线程池的认识和使用
    bat等大公司常考java多线程面试题
    Java面试题必备知识之ThreadLocal
    阿里面试题
    Spring中Bean的生命周期
  • 原文地址:https://www.cnblogs.com/xiaoao/p/10385789.html
Copyright © 2011-2022 走看看