我有一个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中所述的多次输入格式。
这是针对本地开发模式的,其中
答案 0 :(得分:0)
我通过将代理配置文件更改为
解决了该问题。{
"/proxy/*": {
"target": "http://localhost:8090/ROOT/",
"secure": false,
"logLevel": "debug",
"changeOrigin": true,
"pathRewrite": { "^/proxy": "" }
}
}
注意,我仍然不知道安全属性是指向目标URL还是将被代理的传入URL。如果我已经必须在目标属性中指定新的来源,那么我也不明白为什么会有一个changeOrigin属性。