Прокси-тег не соответствует URL-адресу, как предполагалось - PullRequest
0 голосов
/ 03 июля 2019

У меня есть приложение Angular, пытающееся подключиться к веб-службе, размещенной в приложении Java, через сервер Tomcat.Когда страница загружается, она пытается связаться с одной из конечных точек службы и в лучшем случае получает 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, скорее всего, всегда будет true, поэтому я не уверен, что это нужно указывать.

Это для локального непроизводственного режима разработки, где сервер запускается с

  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 голосов
/ 05 июля 2019

Я решил проблему, изменив файл конфигурации прокси на

{
    "/proxy/*": {
        "target": "http://localhost:8090/ROOT/",
        "secure": false,
        "logLevel": "debug",
        "changeOrigin": true,
        "pathRewrite": { "^/proxy": "" }
    }
}

Обратите внимание, я до сих пор не знаю, относится ли свойство secure к целевому URL или входящему URL, который будет проксирован. Я также не понимаю, почему существует свойство changeOrigin, если мне уже приходилось указывать новый источник в целевом свойстве.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...