項目采用Spring cloud微服務(wù)框架,使用ZUUL作為路由服務(wù)崎逃,在使用過程中遇到了如下問題丽焊,記錄下來供大家借鑒较剃。
1、關(guān)于跨域
API需要提供給其他項目使用技健,由于服務(wù)通過zuul写穴,所以zuul需要支持跨域訪問。
解決辦法:
增加跨域過濾器即可
@Bean
public CorsFilter corsFilter() {
final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
final CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
config.addAllowedOrigin("*");
config.addAllowedHeader("*");
config.addAllowedMethod("*");
config.setMaxAge(3600L);
source.registerCorsConfiguration("/**", config);
return new CorsFilter(source);
}
2雌贱、文件上傳中文名亂碼
使用form上傳文件啊送,直接post到服務(wù),文件名中文讀取正常欣孤。但是通過zuul中轉(zhuǎn)后馋没,文件名變成亂碼。
解決辦法:
1降传、注意編碼篷朵,全站api和前端全部要使用utf-8編碼。zuul中強制編碼為utf-8婆排,參數(shù)配置如下:
spring:
http:
encoding:
charset: UTF-8
enabled: true
force: true
2声旺、修改nginx路由設(shè)置,在原來的api地址前泽论,統(tǒng)一增加zuul艾少。因為默認上傳文件是通過服務(wù)自己的controller來處理,增加zuul前綴后翼悴,通過zuul servlet來處理缚够,避免了多次跳轉(zhuǎn),和引入編碼錯誤鹦赎。nginx配置舉例:
location /api/ {
proxy_pass http://localhost:9999/zuul/api/;
proxy_redirect http://localhost:9999/zuul/api/ /api/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 500m;
proxy_connect_timeout 60s;
proxy_read_timeout 600s;
proxy_send_timeout 600s;
}
3谍椅、增加zuul前綴后會導致header中出現(xiàn)Access-Control-Allow-Credentials等屬性重復的異常,需要在zuul中設(shè)置header忽略古话。參數(shù)配置如下
zuul:
sensitiveHeaders: Authorization
ignored-headers: Access-Control-Allow-Credentials,Access-Control-Allow-Origin,Vary,X-Frame-Options