tomcat 如何处理cookie的Angular 发展服务器时,从另一个域的Angular 获取信息

5f0d552i  于 2022-12-23  发布在  Angular
关注(0)|答案(1)|浏览(162)

我有一个服务器,我需要用HTTPClient向它发帖、获取等。例如,这个主机是example.com:8080。它是一个带有JSESSIONID Java cookie的Tomcat。
在开发过程中,我在拦截器上设置了withCredentials: true,用于将cookie发送到服务器。
如果我在本地运行java服务器,即在localhost:8080,在我登录java应用程序后,我会得到cookie,并在另一个浏览器选项卡中运行angular dev server,withcredentials功能工作正常,但现在我不能在本地运行java应用程序,所以我需要将请求发送到example.com:8080,当然它不工作,因为de域不匹配。
我试着在我的hosts文件中设置serverlocal.server,但是没有成功。我正在考虑一个 *kong API网关 * 或者一个 nginx 作为反向代理,但是对于我想做的事情来说似乎太复杂了。
让它发挥作用的最佳方法是什么?

h7wcgrx3

h7wcgrx31#

最后,我使用了一个非常简单的用于node.js的http代理:
库位于https://www.npmjs.com/package/http-proxy
这允许我在本地主机上创建一个代理以转到example.com,同时还可以摆脱 CORS 问题!
代码如下所示:

const options = {
  target: "http://example.com:8080/",
  port: 5000,
};

const http = require("http");
const httpProxy = require("http-proxy");
const proxy = httpProxy.createProxyServer({});

const ignoreAccessControlHeaders = (header) =>
  !header.toLowerCase().startsWith("access-control-");

// Received a response from the target
proxy.on("proxyRes", (proxyRes, req, res) => {
  proxyRes.headers = Object.keys(proxyRes.headers)
    .filter(ignoreAccessControlHeaders)
    // Create an object with all the relevant headers
    .reduce(
      (all, header) => ({ ...all, [header]: proxyRes.headers[header] }),
      {}
    );

  // Override the response Access-Control-X headers
  if (req.headers["access-control-request-method"]) {
    res.setHeader(
      "access-control-allow-methods",
      req.headers["access-control-request-method"]
    );
  }
  if (req.headers["access-control-request-headers"]) {
    res.setHeader(
      "access-control-allow-headers",
      req.headers["access-control-request-headers"]
    );
  }
  if (req.headers.origin) {
    res.setHeader("access-control-allow-origin", req.headers.origin);
    res.setHeader("access-control-allow-credentials", "true");
  }
});

// Failed to send a request to the target
proxy.on("error", (error, req, res) => {
  res.writeHead(500, {
    "Content-Type": "text/plain",
  });
  res.end("Proxy Error: " + error);
});

var server = http.createServer(function (req, res) {
  proxy.web(req, res, {
    target: options.target,
    secure: true, // Verify the SSL Certs
    changeOrigin: true, // Set origin of the host header to the target URL
  });
});

console.log("listening on port", options.port);
server.listen(options.port);

工作起来像一个魅力!
对于新手,可以将其设置为proxy.js并使用以下命令执行:

node proxy.js

因此,在本例中,您的example.com:8080将被代理到localhost:5000

相关问题