nginx /Java 解决跨域问题方案

 location / {
        #if ($request_method = 'OPTIONS') {
           # add_header 'Access-Control-Allow-Origin' '*';
           # add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';

            #add_header 'Access-Control-Allow-Headers' '*';

           # add_header 'Access-Control-Max-Age' 1728000;
           # add_header 'Content-Type' 'text/plain charset=UTF-8';
           # add_header 'Content-Length' 0;
           # return 204;
        #}
        #if ($request_method = 'POST') {
          #  add_header 'Access-Control-Allow-Origin' '*';
         #   add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
          #  add_header 'Access-Control-Allow-Headers' '*';
        #}
       # if ($request_method = 'GET') {
       #     add_header 'Access-Control-Allow-Origin' '*';
       #     add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
       #     add_header 'Access-Control-Allow-Headers' '*';
       # }
        proxy_pass http://localhost:8085;
        proxy_set_header Host  $host:2385;
        proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_next_upstream http_502 http_504 error timeout invalid_header;
        
      }
    }

Java 解决方案

   String method = request.getMethod();
        if ("options".equalsIgnoreCase(method)) {
            response.setHeader("Access-Control-Allow-Origin", "*");
            response.setHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
            response.setHeader("Access-Control-Allow-Headers", "*");
            response.setHeader("Access-Control-Max-Age", "1728000");
            response.setHeader("Content-Type", "text/plain charset=UTF-8");
            response.setHeader("Content-Length", "0");
            response.getOutputStream().close();
            return true;
        } else {
            response.setHeader("Access-Control-Allow-Origin", "*");
            response.setHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
            response.setHeader("Access-Control-Allow-Headers", "*");
            return false;
        }
    }

在项目开发过程中,多个子系统之间的功能交互,前端出现跨域请求解决方案,前端VUE,后端Java(非springMVC架构)经过测试运行,上述两种方案都可以解决当前需求,当然也存在不同点

1.nginx代理的子系统都需要配置nginx.conf,需要运维支持,不够安全

2.Java方案有一个问题是跨域接口必须单独使用,不然会出现非跨域请求设置跨域接口,无法获取有效数据问题,目前还没有找到问题所在。所以跨域接口必须与非跨域接口单独分开,好处安全问题不用担心

以上是个人经历,不够深入,独家之言,难免偏颇,有错误之处,请留言更正

posted @ 2024-06-05 11:32  简单的李  阅读(12)  评论(0编辑  收藏  举报