Я студент, создающий веб-приложение для нашего учебного проекта с углом 7 для стороны клиента и трикотажом 1.x на стороне сервера.Я создал перехватчик в угловых, чтобы ловить любые ошибки.На моей стороне сервера есть фильтр входа в систему для проверки того, что клиент регистрируется перед доступом к сервисам.я хочу, чтобы перехватчик зафиксировал ошибку, идентифицировал ошибку по ее состоянию (401) и отреагировал на нее запрограммированным выходом из системы.По HttpErrorResponse, который я получаю из фильтра, пусто:
HttpErrorResponse {headers: HttpHeaders, status: 0, statusText: "Unknown
Error", url:
"http://localhost:8080/CouponManager.web/rest/AdminService/Companies", ok:
false, …}
error: ProgressEvent {isTrusted: true, lengthComputable: false, loaded: 0,
total: 0, type: "error", …}
headers: HttpHeaders {normalizedNames: Map(0), lazyUpdate: null, headers:
Map(0)}
message: "Http failure response for
http://localhost:8080/CouponManager.web/rest/AdminService/Companies: 0
Unknown Error"
name: "HttpErrorResponse"
ok: false
status: 0
statusText: "Unknown Error"
url:
"http://localhost:8080/CouponManager.web/rest/AdminService/Companies"
__proto__: HttpResponseBase
вот что я получаю из исключений других служб:
error-interceptor.interceptor.ts:16
HttpErrorResponse {headers: HttpHeaders, status: 500, statusText: "OK",
url"http://localhost:8080/CouponManager.web/rest/AdminService/Companies",
ok: false, …}
error: {message: "Company with name aaa already in database"}
headers: HttpHeaders {normalizedNames: Map(0), lazyUpdate: null,
lazyInit: ƒ}
message: "Http failure response for
http://localhost:8080/CouponManager.web/rest/AdminService/Companies: 500
OK"
name: "HttpErrorResponse"
ok: false
status: 500
statusText: "OK"
url:
"http://localhost:8080/CouponManager.web/rest/AdminService/Companies"
_ _proto__: HttpResponseBase
вот фильтр:
@WebFilter({"/LoginFilter", "/rest/AdminService/*",
"/rest/CompanyService/*","/rest/CustomerService/*" })
public class LoginFilter implements Filter {
public LoginFilter(){}
public void destroy() {}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain) throws IOException, ServletException
{
HttpSession session = ((HttpServletRequest) request).getSession(false);
String method = ((HttpServletRequest) request).getMethod();
//filter test
if (session == null) {
System.out.println("session is null");
}
//login and facade tests + cors request
if (session != null
&& session.getAttribute("clientFacade") instanceof CouponClientFacade
&& (boolean)session.getAttribute("loggedIn")
|| method.equals("OPTIONS")) {
System.out.println("filter works");
filterChain.doFilter(request, response);
} else {
System.out.println(" filter error ");;
((HttpServletResponse)response).sendError(401, "You are not logged
into the system");
}
}
}
Я также приведу пример метода обслуживания, чтобы вы могли увидеть, с чем я работаю:
@GET
@Path("Items")
public Response getAllItems() {
HttpSession session = request.getSession(true);
try {
//code excuted here
} catch(Exception e) {
String json = String.format("{\"message\": \"%s\"}",
e.getMessage());
return Response.serverError().entity(json).build();
}
}