1、HTML页面用Ajax访问微服务,身份验证不能使用session,微服务框架本身就是多个WEB APP,所以不能自动同步SESSION,要同步必须要有第三方解决方案;
AJAX可以使用COOKIES,前提是不能跨域;
本地开发时,用localhost:8081,localhost:8082这样会被识别成跨域,通常WEB静态页面会微服务会分开,所以这样没办法用COOKIES;
解决办法:在zuul中添加一个映射到web服务:
web:
path: /web/**
url: http://localhost:8090/
然后在web页面中对微服务的访问也是用localhost:8080,对web页面也是用localhost:8080来访问,这样在WEB页面中,2个都是同一个域名,微服务就可以取到cookies
添加cookies时,属性必须完整:
Cookie ck = new Cookie("ssid",admin.getSsid());
ck.setDomain("localhost");
ck.setPath("/");
ck.setMaxAge(10000000);
response.addCookie(ck);
否则无法保存成功
2、AJAX 请求中的COOKIES和HEADER,是客户端发送的数据,在ZUUL转发中会传给其它的微服务,而SESSION不同,SESSION是在服务器端建立的,在ZUUL转发请求时,是不会带到下一个微服务的;
在ZUUL的网关中,可以对HEADER和COOKIES的值进行校验,检查是否登录,但是在微服务中,还要进行一次数据读取才能取到用户ID,在ZUUL中放入SESSION是无效的。