невозможно отправить запрос сервлету Java с углового 6 httpclient - PullRequest
0 голосов
/ 21 января 2019

как подключиться с Angular к Java сервлету? вот мой угловой сервисный код

import { Injectable } from "@angular/core";
import { HttpClient } from "@angular/common/http";
import { Observable } from "rxjs";

@Injectable({ providedIn: "root" })
export class UploadService {
  url: string;
  constructor(private http: HttpClient) {
    this.url = "http://localhost:8081/ServletSample/";
  }

  uploadFile(data): Observable<any> {
    return this.http.post(this.url, data);
  }

  sendData(data): Observable<any> {
    return this.http.post(this.url + "DataServlet", data);
  }
}

ниже Аутсервис

import { Injectable } from "@angular/core";
import { HttpEvent, HttpHandler, HttpInterceptor } from "@angular/common/http";
import { HttpRequest } from "@angular/common/http";
import { Observable } from "rxjs";

@Injectable()
export class AuthInterceptor implements HttpInterceptor {
  intercept(
    req: HttpRequest<any>,
    next: HttpHandler
  ): Observable<HttpEvent<any>> {
    const clonedRequest = req.clone({
      headers: req.headers.set("X-CustomAuthHeader", "aaaa")
    });
    console.log("req", req);
    console.log("new headers", clonedRequest.headers.keys());

    return next.handle(clonedRequest);
  }
}

Java-сервлет работает под портом

http://localhost:8081/ServletSample/DataServlet

ниже код Java-сервлета

package com.test.servlet;

import java.io.IOException;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class DataServlet extends HttpServlet{

      /**
     * 
     */
    private static final long serialVersionUID = 548987777;

    public DataServlet() {
            super();
            System.out.println("DataServlet constructor called");
        }

        /**
         * @see Servlet#init(ServletConfig)
         */
        public void init(ServletConfig config) throws ServletException {
            System.out.println("DataServlet \"Init\" method called"+ config.toString());
        }

        /**
         * @see Servlet#destroy()
         */
        public void destroy() {
            System.out.println("DataServlet \"Destroy\" method called");
        }


        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException
        {
            System.out.println("DataServlet doGet method called"+ request);
            doPost(request, response);

        }

        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            System.out.println("DataServlet doPost method called");
        }

}

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

Доступ к XMLHttpRequest в «http://localhost:8081/ServletSample/DataServlet' от источника» http://localhost:4201' был заблокирован политикой CORS: Ответ на предпечатный запрос не проходит проверку контроля доступа: Нет 'Access-Control Заголовок -Allow-Origin 'присутствует в запрашиваемом ресурсе.

1 Ответ

0 голосов
/ 21 января 2019

Судя по полученной ошибке, вам нужно включить CORS на сервлете, чтобы разрешать прием вызовов из других источников.

Просто создайте метод private и вызывайте его из методов, в которые вы отправляете фактический ответ. Вы можете установить headers в этом методе. Как то так:

private void setAccessControlHeaders(HttpServletResponse resp) {
  resp.setHeader("Access-Control-Allow-Origin", "http://localhost:9000");
  resp.setHeader("Access-Control-Allow-Methods", "GET");
}

Источник: Сервлет - Совместное использование ресурсов (CORS)

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