2016-10-21 12 views
0

Springクラウドを使用して複数のマイクロサービスを構築しましたが、Spring Cloud NetfixのZuul Serverを使用して当社のマイクロサービスへのリクエスト、このようなゲートウェイの設定:スプリングクラウドを使用してマイクロサービスを構築するときにレスポンスヘッダーにコンテンツ長を追加する方法

application.yml:

server: 
port: 8021 

ribbon: 
ConnectTimeout: 3000 
ReadTimeout: 60000 

zuul: 
ignoredServices: "*" 
add-proxy-headers: true 
#prefix: /v1 

routes: 
m_test: 
path: /api/testService/** 
sensitiveHeaders: "*" 
url: http://127.0.0.1:4008/testService/ 

eureka: 
instance: 
hostname: gateway 
client: 
registerWithEureka: true 
fetchRegistry: true 
serviceUrl: 
    defaultZone: http://127.0.0.1:8761/eureka/ 

CorsFilter.java:

@Component 
@Order(Ordered.HIGHEST_PRECEDENCE) 
public class CorsFilter implements Filter { 
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { 

    HttpServletResponse response = (HttpServletResponse) res; 
    HttpServletRequest request = (HttpServletRequest) req; 
    response.setHeader("Access-Control-Allow-Origin", "*"); 
    response.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE"); 
    response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization,Content-length"); 
    response.setHeader("Access-Control-Max-Age", "1800"); 
    Map<String, String> map = getHeadersInfo(request); 

    if (request.getMethod().equalsIgnoreCase("OPTIONS")) { 
     response.setStatus(HttpServletResponse.SC_OK); 
    } else { 
     chain.doFilter(request, response); 
    } 
} 

public void init(FilterConfig filterConfig) { 
} 

public void destroy() { 
} 

private Map<String, String> getHeadersInfo(HttpServletRequest request) { 
    Map<String, String> map = new HashMap<>(); 
    Enumeration headerNames = request.getHeaderNames(); 
    while (headerNames.hasMoreElements()) { 
     String key = (String) headerNames.nextElement(); 
     String value = request.getHeader(key); 
     map.put(key, value); 
    } 

    return map; 
} 
} 

GatewaySystemApplication.ja VA:

@SpringBootApplication 
@EnableZuulProxy 
@EnableEurekaClient 
public class GatewaySystemApplication { 

public static void main(String[] args) throws Exception { 
    //SpringApplication.run(GatewaySystemApplication.class, args); 
    new SpringApplicationBuilder(GatewaySystemApplication.class).web(true).run(args); 
} 
} 

は、ブラウザのレスポンスヘッダはこのようなものです:

passing through gateway layer response headers

と私の要求ミスのレスポンスヘッダのContent-Length、 しかし、ときに直接、私には、コンテンツの長さを持っていますバックエンドサービスを呼び出す。 directly response headers

答えて

-2

まあ、あなたはContent-Lengthを設定していません。

(FWIW、あなたのContent-Typeも偽です)。

+0

私はcontentTypeを取得するためにこの 'String contentType = Files.probeContentType(Paths.get(filepath))'を使用します。ブラウザレスポンスのcontent-typeは次のように変更されます:Content-Type \t application/zip; charset = UTF-8 'ですが、レスポンスヘッダーにはまだ' content-length 'はありません。 ps:あなたの答えをありがとう – jelen

関連する問題