在doFilter方法中引发异常,并使用Angular拦截器catchError方法进行捕获

问题描述

我正在尝试通过以下doFilter方法打印来自服务器的错误消息:

    public void doFilter(ServletRequest req,ServletResponse res,FilterChain chain) throws 
    IOException,servletexception {
    final HttpServletRequest request =  (HttpServletRequest) req;
    final HttpServletResponse response = (HttpServletResponse) res;

    if(HttpMethod.OPTIONS.name().equalsIgnoreCase(request.getmethod())) {
        response.setStatus(HttpServletResponse.SC_OK);
    } else {
        final String authorization = request.getHeader("Authorization");
        //Check if the request is not login
        if(!request.getRequestURI().contains("login")) {
            //Check if token startsWith Bearer and != null
            if(authorization == null || !authorization.startsWith("Bearer ") || !check(request.getRequestURI(),authorization.substring(7))) {
                throw new servletexception("Your user details are unauthorized,please log in again");
            }

            //Check if the token is valid and updated,if not then return status 401
            boolean bool = validatetoken(authorization.substring(7));
            if(!bool) {
                response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
            } else {
                response.addheader("Access-Control-Expose-Headers","Authorization");
                response.setHeader("Authorization",newToken);
            }
        }
    }
    chain.doFilter(req,res);
}

在Angular中,我尝试使用拦截方法来打印来自servletexception的字符串:

intercept(req: HttpRequest<any>,next: HttpHandler) {

if (localStorage.getItem('Authorization')) {
  req = req.clone({
    setHeaders: {
      Authorization: localStorage.getItem('Authorization')}
  })
}
return next.handle(req).pipe(
  tap(res => {
    if (res instanceof HttpResponse) {
      localStorage.setItem("Authorization","Bearer " + res.headers.get('Authorization'));
    }
  }),catchError(err => {
  if(err && err.status === 0){
    this.err = "Server Is Down";
  }
  if(err && err.status === 401){
    this.err = "Your user details are unauthorized,please login again";
  }
  localStorage.removeItem('Authorization');
  //Output using the Data service to Login component.
  this.dataService.setErr(this.err);
  this.router.navigateByUrl('login');
  return throwError(err);
}))
}

在catchError块内,我得到状态0和未知错误,因此它始终显示“服务器已关闭”消息。

有什么主意我该如何捕捉错误并在Angular中打印消息?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)