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

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM