基于服务器session的SSO的方案,用户的登陆状态都是存在服务器端的
基于浏览器cookie的token实现一个sso,在原来的基础上做进一步的改造。让他不依赖session。而是完全由cookie里的token来决定。
给前端颁发token的时候不是写在前端的session中,而是cookie里面
之前我们拿到token是存到session里面。这里注释掉。
token的值
域名设置的是imooc.com。那么所有以immoc.com结尾的二级域名,包括imooc.com admin.immoc.com 、gateway.imooc.com.
全都可以访问到这个token
sessionTokenFilter
z这里之前是从session中拿到token。然后加到请求头里面。
cookieTokenFilter
这里要修改成从从cookie里面拿token的值。这里的session如果为空就什么不去做,那么可以自己再加一个cookie的Filter
声明称Spring 的 component组件
把这两段代码复制过来。请求的上下文和request对象拿到
通过单独的getCookie的方法回去到cookie中的token
需要一个restTemplate来发起请求
写一下getCookie的方法
那么cookieFilter就写到这里。
前端代码修改
前端的构造函数里面,发送请求到api/user/me
api开头的请求都会转到网关上,所以上面的/api/user/me是转到网关上的
网关代码修改
写一个过滤器,直接处理掉/user/me 加了一个user的转发,,转发到哪里去无所谓。因为我们并不真正的把它转出去,而是直接在网关里把它处理掉了。
写一个MeFilter
继承ZuulFilter
声明称Spring的Bean
只有当前的请求是/user/me的时候才处理这个请求。只有当请求是/user/me的 才走这个过滤器的下一步。
刚才已经说了。从cookieFilter这个过滤器转发出来的请求,要么转发不出去,直接跳到认证的流程上,
只要出去的请求肯定是带着一个有效的access_token
那么在我这个Authorization过滤器里面,如果你带着这个有效的access_token
最终会往请求头里面加一个username字段
结束