GatewayServerApplication.java 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package com.szwl;
  2. import org.apache.commons.lang.StringUtils;
  3. import org.springframework.boot.SpringApplication;
  4. import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
  5. import org.springframework.context.annotation.Bean;
  6. import org.springframework.context.annotation.ComponentScan;
  7. import org.springframework.context.annotation.Configuration;
  8. import org.springframework.http.HttpHeaders;
  9. import org.springframework.http.HttpMethod;
  10. import org.springframework.http.HttpStatus;
  11. import org.springframework.http.server.reactive.ServerHttpRequest;
  12. import org.springframework.http.server.reactive.ServerHttpResponse;
  13. import org.springframework.web.cors.reactive.CorsUtils;
  14. import org.springframework.web.server.ServerWebExchange;
  15. import org.springframework.web.server.WebFilter;
  16. import org.springframework.web.server.WebFilterChain;
  17. import reactor.core.publisher.Mono;
  18. @Configuration
  19. @EnableAutoConfiguration //启用自动配置 该框架就能够进行行为的配置,以引导应用程序的启动与运行, 根据导入的starter-pom 自动加载配置
  20. @ComponentScan
  21. public class GatewayServerApplication {
  22. public static void main(String[] args) {
  23. SpringApplication.run(GatewayServerApplication.class, args);
  24. }
  25. private static final String ALL = "*";
  26. private static final String MAX_AGE = "18000L";
  27. @Bean
  28. public WebFilter corsFilter() {
  29. return (ServerWebExchange ctx, WebFilterChain chain) -> {
  30. ServerHttpRequest request = ctx.getRequest();
  31. if (!CorsUtils.isCorsRequest(request)) {
  32. return chain.filter(ctx);
  33. }
  34. HttpHeaders requestHeaders = request.getHeaders();
  35. ServerHttpResponse response = ctx.getResponse();
  36. HttpMethod requestMethod = requestHeaders.getAccessControlRequestMethod();
  37. HttpHeaders headers = response.getHeaders();
  38. headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, ALL);
  39. // headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, requestHeaders.getOrigin());
  40. String requestHeadersAllowHeaders = StringUtils.strip(String.valueOf(requestHeaders.get("Access-Control-Request-Headers")), "[]");
  41. // log.info("HttpHeaders:",requestHeadersAllowHeaders);
  42. headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_HEADERS, requestHeadersAllowHeaders);
  43. // headers.addAll(HttpHeaders.ACCESS_CONTROL_ALLOW_HEADERS, requestHeaders.getAccessControlRequestHeaders());
  44. // headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS, ALL);
  45. if (requestMethod != null) {
  46. headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS, requestMethod.name());
  47. }
  48. headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS, "true");
  49. headers.add(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, ALL);
  50. headers.add(HttpHeaders.ACCESS_CONTROL_MAX_AGE, MAX_AGE);
  51. HttpMethod requestMethod2 = request.getMethod();
  52. if (request.getMethod() == HttpMethod.OPTIONS) {
  53. response.setStatusCode(HttpStatus.OK);
  54. return Mono.empty();
  55. }
  56. return chain.filter(ctx);
  57. };
  58. }
  59. }