CORS включен в сервлете Java, но получает ошибку CORS от внешнего интерфейса - PullRequest
0 голосов
/ 05 июля 2019

Я пишу веб-приложение, в котором клиент отправляет (JSON) данные формы на сервер, а сервер также должен ответить JSON. Серверная часть написана с использованием Java-сервлетов, работающих на Tomcat, а клиент написан на Angular 7. К сожалению, я сталкиваюсь с ошибкой CORS даже после включения cors через заголовки HTTP. Что-то мне не хватает?

Это ошибка, которую я получаю на стороне клиента: Доступ к XMLHttpRequest по адресу 'http://localhost:8080/mysocial/signIn' из источника' http://localhost:4200' был заблокирован политикой CORS: Ответ на предпечатный запрос не проходит проверку контроля доступа: нет заголовка 'Access-Control-Allow-Origin' присутствует на запрашиваемом ресурсе.

Я прочитал следующие посты и попробовал каждое из решений, но проблема все еще сохраняется: CORS включен, но все еще выдает ошибку CORS

Как исправить HTTP-запрос CORS в формате Angular 5

Как я уже сказал, я включил заголовки CORS. Фрагменты кода показывают мой код на стороне сервера и на стороне клиента:

// From my data service (client-side angular 7)
import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';

@Injectable({
  providedIn: 'root'
})
export class DataService {
  private baseUrl: string = "http://localhost:8080/mysocial";
  private http: HttpClient;

  constructor(http: HttpClient) { 
    this.http = http;
  }

  public authenticateLogin(username: string, password: string) //: boolean
  {
    let url: string = `${this.baseUrl}/signIn`;
    let header = new HttpHeaders({'Accept': 'application/json' ,'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*' });
    let httpOptions = { headers: header };
    let body = {username: username, password: password};

    return this.http.post(url, body, httpOptions).subscribe(
      (response) => console.log(response),
      (err) => console.log(err)
    );
    //return true;
  }
}

Код на стороне сервера:

// server-side java servlets code
   private void configResponse(HttpServletResponse response)
   {
      response.setContentType("application/json");
      response.addHeader("Access-Control-Allow-Origin", "http://localhost:4200");
      response.addHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE, HEAD");
   }

   public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
   {
      Model model = (Model) getServletContext().getAttribute("model");
      String username = request.getParameter("username");
      String password = request.getParameter("password");

      configResponse(response);
      PrintWriter out = response.getWriter();

      if (model.validateLoginDetails(username, password))
      {
         String firstName = model.getUserInfo("firstName", "username", username);
         int id = Integer.parseInt(model.getUserInfo("id", "username", username));

         HttpSession session = request.getSession();
         session.setMaxInactiveInterval(60);
         session.setAttribute("username", username);
         session.setAttribute("firstname", firstName);
         session.setAttribute("id", id);

         JsonObject value = createJsonResponse(username, password, true);
         out.println(value);
      }
      else
      {
         JsonObject value = createJsonResponse(username, password, false);
         out.println(value);
      }
   }

Я ожидаю, что сервер отправит JSON обратно клиенту, но я получаю ошибку CORS от клиента.

1 Ответ

0 голосов
/ 05 июля 2019

Просто для полноты и для всех, кто может столкнуться с этой проблемой, я смог решить эту проблему, используя фильтры tomcat, представленные здесь: http://tomcat.apache.org/tomcat-7.0-doc/config/filter.html#CORS_Filter (показано sideshowbarker (https://stackoverflow.com/users/441757/sideshowbarker))

)

Сначала пришлось изменить некоторые конфигурации серверов, чтобы они соответствовали фильтру. Я бы предложил настроить фильтр в соответствии с вашими потребностями.

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