1.nginx反向代理

1.1修改nginx配置 nginx.conf

worker_processes  1;

events {

    worker_connections  1024;

}

http {

    include       mime.types;

    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65; # 保持连接的超时时间

    server {

    listen 80; # 监听端口号

    server_name localhost; # 监听地址

		location / {

			# 配置后端服务的代理

			proxy_pass http://localhost:8090;

			proxy_set_header Host $host;

			proxy_set_header X-Real-IP $remote_addr;

			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

			# 添加跨域相关的响应头

			add_header Access-Control-Allow-Origin *;

			add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";

			add_header Access-Control-Allow-Headers "Authorization, Origin, X-Requested-With, Content-Type, Accept";

			add_header Access-Control-Allow-Credentials "true";

			# 针对复杂请求的预检请求

			if ($request_method = 'OPTIONS') {

				add_header Content-Length 0;

				add_header Content-Type 'text/plain; charset=utf-8';

				add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';

				add_header Access-Control-Allow-Headers 'Authorization, Origin, X-Requested-With, Content-Type, Accept';

				return 204;

			}

		}

	}

}

1.2修改host文件(可选)

一般位置在 C:\Windows\System32\drivers\etc\hosts

2.过滤器解决跨域问题

本质上是采用同源策略

@Component

public class CorsFilter implements Filter {

    @Override

    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", "http://example.com");

        response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");

        response.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization");

        response.setHeader("Access-Control-Max-Age", "3600");

        if ("OPTIONS".equalsIgnoreCase(request.getMethod())) {

            response.setStatus(HttpServletResponse.SC_OK);

        } else {

            chain.doFilter(req, res);

        }

    }

    @Override

    public void init(FilterConfig filterConfig) {}

    @Override

    public void destroy() {}

}

3.使用WebMvcConfigurer解决跨域问题

@Configuration

public class WebConfig implements WebMvcConfigurer {

    @Override

    public void addCorsMappings(CorsRegistry registry) {

        registry.addMapping("/**")

                .allowedOrigins("*")

                .allowedMethods("GET", "POST", "PUT", "DELETE")

                .allowedHeaders("Content-Type", "*")

                .maxAge(3600); // 设置响应有效期

    }

}

4.SpringCloudGateway 解决跨域问题

在yml文件中配置

spring:
  cloud:
     gateway:
      httpclient:
        connect-timeout: 60000
        response-timeout: 80s
      # 配置跨域
      globalcors:
        cors-configurations:
          '[/**]':
            allowedOrigins: '*'
            allowedMethods: '*'
            allowedHeaders: '*'
            allowCredentials: true
        add-to-simple-url-handler-mapping: true

如果还不行那就使用注解试下吧【哭】

@RestController
public class MyController {
    @CrossOrigin(origins = "需要解决跨域的地址")
    @GetMapping("/api/data")
    public String getData() {}
}

涩图time