代理服务器标记与预期的URL不匹配

时间:2019-07-03 17:08:21

标签: angular proxy

我有一个Angular应用程序,试图通过Tomcat服务器连接到Java应用程序中托管的Web服务。页面加载时,它将尝试与服务端点之一联系,充其量只能获取HTTP 404,而其他时候由于CORS限制而导致服务调用被阻塞。

简而言之,我想将Java服务托管在localhost:8090上,可通过此Angular应用程序进行访问。一个示例服务是:

http://localhost:8090/sc-reporting/ldap

我相信Java服务正在运行,但是甚至无法通过Angular驱动的代码来访问它们。

本地环境文件为:

export const environment = {
    production: false,
    baseUrl: 'http://localhost:8090/proxy'
  };

基本环境文件为:

export const environment = {
  production: false,
  baseUrl: 'http://localhost:8090/proxy'
};

服务违规服务调用会执行以下操作:

return this.http.post(environment.baseUrl + '/ldap/getUserProfile', '{"user_id":\"'+userid+'\"}', httpOptions);

包含代理信息的angular.json片段为:

               "serve": {
                    "builder": "@angular-devkit/build-angular:dev-server",
                    "options": {
                        "browserTarget": "admin-tool:build"
                    },
                    "configurations": {
                        "prod": {
                            "browserTarget": "admin-tool:build:prod"
                        },
                        "dev": {
                            "browserTarget": "admin-tool:build:dev",
                            "proxyConfig": "dev-proxy-config.json"
                        },
                        "stage": {
                            "browserTarget": "admin-tool:build:stage"
                        },
                        "local": {
                            "browserTarget": "admin-tool:build:local",
                            "proxyConfig": "local-proxy-config.json"
                        }
                    }

最后,代理配置文件local-proxy-config.json是

{
    "/proxy/*": {
        "target": 'http://localhost:8090'
        "secure": false,
        "logLevel": "debug",
        "changeOrigin": true,
        "pathRewrite": {'/proxy': '/sc-reporting'} ,
    }

}

我不知道secure属性是指向URL传入URL还是请求被代理到的URL。 LogLevel只提到我尝试做一个代理,但没有显示实际的请求和(不正确)匹配。我认为changeOrigin可能永远都是正确的,所以我不确定是否需要指定。

这是用于本地非生产开发模式的,其中服务器以

启动
  ng serve --configuration=local

启动时,Angular控制台显示:

$ ng serve --configuration=local
Your global Angular CLI version (8.0.2) is greater than your local
version (7.3.8). The local Angular CLI version is used.

To disable this warning use "ng config -g cli.warnings.versionMismatch false".
[HPM] Proxy created: /  ->  http://localhost:8090
[HPM] Subscribed to http-proxy events:  [ 'error', 'close' ]
** Angular Live Development Server is listening on localhost:4200, open your browser on http://localhost:4200/ **

Date: 2019-07-03T16:44:24.017Z
Hash: a6444379feddc404c22b
Time: 113614ms
chunk {0} 0.fa0122fa52d24925d111.js, 0.fa0122fa52d24925d111.js.map () 215 kB  [rendered]
chunk {main} main.2dd6a44d76e8b77fa0a8.js, main.2dd6a44d76e8b77fa0a8.js.map (main) 8.25 MB [initial] [rendered]
chunk {polyfills} polyfills.0311b8e71410fdde5f64.js, polyfills.0311b8e71410fdde5f64.js.map (polyfills) 158 kB [initial] [rendered]
chunk {runtime} runtime.1bb23cf2a48df72b603f.js, runtime.1bb23cf2a48df72b603f.js.map (runtime) 8.8 kB [entry] [rendered]
chunk {scripts} scripts.00f56f46ef424e79bc34.js, scripts.00f56f46ef424e79bc34.js.map (scripts) 703 kB [entry] [rendered]
chunk {styles} styles.d833da89befc273a6b3b.css, styles.d833da89befc273a6b3b.css.map (styles) 789 kB [initial] [rendered]
i 「wdm」: Compiled successfully.

我尝试使用https://medium.com/better-programming/setup-a-proxy-for-api-calls-for-your-angular-cli-app-6566c02a8c4d中概述的方法,我认为该方法是对Angular的开箱即用的代理支持。我还尝试了https://github.com/angular/angular-cli/wiki/stories-proxy#multiple-entries中所述的多次输入格式。

这是针对本地开发模式的,其中

1 个答案:

答案 0 :(得分:0)

我通过将代理配置文件更改为

解决了该问题。
{
    "/proxy/*": {
        "target": "http://localhost:8090/ROOT/",
        "secure": false,
        "logLevel": "debug",
        "changeOrigin": true,
        "pathRewrite": { "^/proxy": "" }
    }
}

注意,我仍然不知道安全属性是指向目标URL还是将被代理的传入URL。如果我已经必须在目标属性中指定新的来源,那么我也不明白为什么会有一个changeOrigin属性。

相关问题