Я пишу веб-приложение, в котором клиент отправляет (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 от клиента.