springcloud 实战 网关zuul使用中遇到的相关问题

springcloud 实战  网关zuul使用中遇到的相关问题


1.网关zuul使用时,跨域问题
在网关中配置pre过滤器:

response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
response.addHeader("access-control-Allow-Headers","*");
response.addHeader("Access-Control-Allow-Methods","*");
response.addHeader("Access-Control-Max-Age","3600");//预检请求的缓存时间(秒),即在这个时间段里,对于相同的跨域请求不会再预检了
response.addHeader("Access-Control-Expose-Headers","Set-Cookie,REDIRECT,CONTENTPATH");//允许访问的头信息
response.addHeader("Access-Control-Allow-Credentials","true");//允许Cookie跨域,在做登录校验的时候有用

 

2.网关zuul使用时,session没有传递到微服务,微服务和网关中的sessionId不一致

1> 保证网关中的sessionId 和 后端微服务一致。

zuul.sensitiveHeaders="*"

  

2>session共享时,将用户第一次登陆校验放在网关处理,在网关中将用户新存入session,返回请求,
第二次请求时前端会携带第一次的网关中的sessionID,经过网关,后端微服务。

注意:如果用户session校验逻辑放在网关,而将user写入session的逻辑放在后端微服务,则第一次请求后,返回到web前端会存在两个sessionId, 一个是网关中生成的,一个是微服务中生成的,导致第二次请求会取出最后一个sessionId(微服务中生成的),
而该sesssionId在网关中是无法取出用户信息的,仍然提示用户未登录,该场景,需要先通过一次其他请求(比如隐藏一个不校验的图片地址请求)消耗掉第一次请求的sessionId不一致的问题。
建议直接将用户session的写入和校验都放到网关中进行处理。

 

3.网关zuul使用时,请求超时

ribbon.ReadTimeout=60000
ribbon.ConnectTimeout=60000
zuul.host.connect-timeout-millis=30000
zuul.host.socket-timeout-millis=30000

  

posted @ 2018-10-28 11:09  陈小兵  阅读(3843)  评论(0编辑  收藏  举报