如何在Sonatype Nexus上启用CORS?

时间:2015-09-04 08:50:02

标签: repository cross-domain cors nexus sonatype

我希望使用AngularJS作为Frontend为不同的东西开发一个Monitoring-WebApp。其中一个核心要素是展示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 个答案:

答案 0 :(得分:4)

CORS标头出现在您尝试调用的系统的响应中。 (在客户端(在这种情况下,也称为浏览器)中进行了检查,您可以在后端实现一个调用以拥有这些调用,并且可以忽略这些标头,但这可能变得很难维护。)要更改这些标头将需要一个proxy。因此,您的应用程序不会像这样直接调用

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

至少有两种方法:一种是在声纳服务器之前直接添加代理,然后为每个人修改标头。由于安全原因,我不建议这样做。 :)

另一个更可维护的解决方案是按如下方式遍历监视Web应用程序的本地域:

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

要实现此目的,您需要在运行应用程序的地方设置代理。这样可以映射您依赖的不同服务,并在必要时修改标题。

我不知道您要使用哪个应用程序http server,但以下是有关该主题的一些代理配置文档:

对于 Apache HTTPD mod_proxy,您可以使用类似于以下的配置:

ProxyPass "/proxy/nexus/" "http://localhost:9090/"
ProxyPassReverse "/proxy/nexus/" "http://localhost:9090/"

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

对于 Nginx location,您可以采用以下方式

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);

};