Я делаю HTTP-звонки с клиента angular 7 в службу REST Джерси, используя Tomcat.Проблема в том, что сеанс теряется после входа в систему.
Я пытался использовать разные заголовки, но не нашел решения.Я не использую прокси.Я использую фильтр CORS и фильтр входа в систему + сеанс, который показывает мне, что сеанс теряется после успешного входа в систему.Фильтр сеанса используется только после входа в систему при последующих вызовах HTTP.Я протестировал службу с использованием POSTMAN, и в этом случае сеанс не теряется.
Угловой вызов службы входа в HTTP:
public login(user: User): Observable<number> {
const url = 'http://localhost:8080/CouponsWebApp/user/login';
return this.httpService.post<number>(url, user, {withCredentials: true})
.pipe(catchError(this.messageService.handleError<number>('login'))
);
}
CORSFilter на сервере:
res.setHeader("Access-Control-Allow-Origin", "http://localhost:4200");
res.setHeader("Access-Control-Allow-Credentials", "true");
res.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, DELETE, OPTIONS");
res.setHeader("Access-Control-Allow-Headers", "x-requested-with,Content-Type");
Вход в систему и фильтр сеанса на сервере:
HttpSession session = ((HttpServletRequest) request).getSession(false);
System.out.println("session=" + session);
if (session == null) { // session expired
try {
((HttpServletResponse) response).sendRedirect(((HttpServletRequest) request).getContextPath() + "/user/login");
return;
} catch (IOException e) {
System.out.println(e.getMessage());
}
} else {
CouponClientFacade couponClientFacade = (CouponClientFacade) session.getAttribute("CouponClientFacade");
System.out.println("couponClientFacade=" + couponClientFacade);
if (couponClientFacade == null) { // not logged in
try {
((HttpServletResponse) response).sendRedirect(((HttpServletRequest) request).getContextPath() + "/user/login");
return;
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
}
Я ожидал получить сеанс в фильтре сеанса, но он печатает session = null.