如何在Sonatype Nexus上启用CORS?

9

我希望开发一个监控WebApp,用AngularJS作为前端,与不同的事物相关。其中核心元素之一是展示Nexus-Artifacts/Repositories的概述。

当我请求REST API时,我收到以下错误信息:

No 'Access-Control-Allow-Origin' header is present on the requested resource.
Origin 'http://localhost:9090' is therefore not allowed access.

为了解决这个错误,我需要修改响应头以启用CORS。
如果有人熟悉这种问题并能给我答案,那就太好了!
1个回答

4

你正在尝试调用的系统响应中存在 CORS 头信息。这些头信息在客户端(即浏览器)中进行检查,你可以在后端实现一个调用来处理这些请求并忽略这些头信息,但这可能会变得非常难以维护。如果要更改这些头信息,你需要使用一个 代理。因此,你的应用程序将不直接调用URL,而是通过代理来调用。

fetch("http://localhost:9090/api/sometest")

至少有两种方法:一种是直接在Sonar服务器之前添加代理并修改所有人的标头。基于安全性考虑,我不太建议这样做。

另一种更易维护的解决方案是通过监控Web应用程序的本地域进行如下操作:

fetch("/proxy/nexus/api/sometest")

为了实现这一点,您需要在应用程序运行的位置设置代理。 这可以映射您依赖的不同服务,并在必要时修改标头。
我不知道您将使用哪个应用程序 http服务器,但以下是有关该主题的一些代理配置文档:
对于 Apache HTTPD,您可以使用类似于以下配置的 mod_proxy
ProxyPass "/proxy/nexus/" "http://localhost:9090/"
ProxyPassReverse "/proxy/nexus/" "http://localhost:9090/"

可能需要使用 cookies,因此您需要查看以下配置:

对于 Nginxlocation,您可以使用以下语法:

location /proxy/nexus/ {
    proxy_pass http://localhost:9090/;
}

关于 node.js,请查看文档:https://github.com/nodejitsu/node-http-proxy

module.exports = (req, res, next) => {

  proxy.web(req, res, {
    target: 'http://localhost:4003/',
    buffer: streamify(req.rawBody)
  }, next);

};

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接