【问题标题】:How to make a cross domain request and send cookies with the request如何发出跨域请求并随请求发送 cookie
【发布时间】:2018-03-13 21:22:25
【问题描述】:

我正在为后端和前端(spring mvc 和 angular4)开发 2 个应用程序,我使用 http 端口(8080)在 tomcat 服务器上托管 spring 应用程序,我的前端使用 http 端口(4200),两者之间的通信这些应用程序是使用 json 制作的。 为了识别用户,我正在使用会话 cookie。

问题是我遇到了跨域问题,因为我为这两个应用程序使用了不同的端口,当我发出 http post 请求时,cookie 没有发送。

到目前为止我找到的唯一解决方案: 当我将 angular 应用程序放入我的 spring 项目的 /src/main/webapp 中时,遵循 this documentation ,我没有问题并且 cookie 是自动设置的,但是每次我想要测试某些东西时执行前面的步骤很痛苦.

在开发过程中我还考虑过一些解决方法,比如 jsonp,但我认为这不会有成效,而且以后我需要执行一些 e2e 测试。

有没有人有关于如何制作这个跨域的想法/示例...

【问题讨论】:

    标签: spring angular http cookies tomcat8


    【解决方案1】:

    可以通过代理建立通信。

    "scripts" 中添加 package.json "start": "ng serve --proxy-config proxy.config.json"

    proxy.config.json 中添加:

    {
        "/api/*": {
            "target": "http://server.com:8080",
            "secure": false,
            "logLevel": "debug"
        }
    }
    

    【讨论】:

    • 你能更好地解释一下这段代码将如何解决我的问题
    【解决方案2】:

    所以经过一些研究后,我提出了这个解决方案: 就我的后端服务的安全性和可扩展性而言,最好的方法是使用 CROS,任何其他解决方案(如 JSONP、代理)只是一种解决方法,这不会带来任何结果,因为遵循 same-origin-policy按浏览器

    按照this documentation 将会发生的场景: 1) 浏览器会发送一个 OPTIONAL 请求 2)服务器将以允许的来源响应 3)如果我们的域(在我的例子中是前端域/角度应用程序)被验证,cookies将自动发送到另一个请求中

    我所做的实现: 在春季应用程序中:

    //Some logic before this
    if ("OPTIONS".equals(request.getMethod())) {
            response.setHeader("Access-Control-Allow-Origin", "http://localhost:4200");
            response.setHeader("Access-Control-Allow-Credentials","true");
            response.setHeader("Access-Control-Allow-Methods","POST");
            response.setHeader("Access-Control-Allow-Headers","Content-Type");
    
            response.setStatus(HttpServletResponse.SC_OK);
            ((HttpServletResponse) servletResponse).setHeader("Access-Control-Allow-Origin", "http://localhost:4200");
            return ;
        }
    // some logic after this
    

    在前面的应用程序中,我们可以使用 xhr 发送请求,就像附加链接中描述的那样。

    【讨论】:

      猜你喜欢
      • 2019-02-11
      • 1970-01-01
      • 2013-01-05
      • 1970-01-01
      • 1970-01-01
      • 2019-09-13
      • 2018-04-12
      • 2015-04-22
      • 2014-07-12
      相关资源
      最近更新 更多