I have next problem with my rest application. I have my backend with an custom auth handler
public class AutorizacionFilter extends OncePerRequestFilter {
@Autowired
UsuariosService usuarioService;
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
String dominio = ((HttpServletRequest) request).getRequestURI();
if ("OPTIONS".equalsIgnoreCase(request.getMethod())) {
filterChain.doFilter(request, response);
} else if (dominio.startsWith("/api/login") || dominio.startsWith("/api/usuarios")) {
filterChain.doFilter(request, response);
} else {
String token = request.getHeader ("Authorization");
if (token == null || !usuarioService.validarSesion(token)) {
((HttpServletResponse) response).sendError(HttpServletResponse.SC_UNAUTHORIZED, "your message goes here");
return;
}
filterChain.doFilter(request, response);
}
}
In my web page made witn Angular 5, I have an interceptor for catch the 401 status code
@Injectable()
export class AuthHttpInterceptor implements HttpInterceptor {
intercept(
req: HttpRequest<any>,
next: HttpHandler
): Observable<HttpEvent<any>> {
if (!req.headers.has("Content-Type")) {
req = req.clone({
headers: req.headers.set("Content-Type", "application/json")
});
}
req = req.clone({ headers: req.headers.set("Accept", "application/json") });
console.log(JSON.stringify(req.headers));
return next.handle(req).do(
(event: HttpEvent<any>) => {
if (event instanceof HttpResponse) {
console.log("Autorizacion OK!");
console.log("Code: " + event.status);
}
},
(err: HttpErrorResponse) => {
if (err.error instanceof Error) {
console.log("An error occurred:", err.error.message);
} else {
console.log(
`Backend returned code ${err.status}, body was: ${err.message}`
);
}
}
);}}
When the toker expire the interceptor cant parse the answer and give me this error
Http failure response for (unknown url): 0 Unknown Error
I have a lot of reading about the problem of the httpClient with empty responses, but I cant understand how to fixed/find a way around.
Can anyone give a hand to understand this issue.
Thanks
Thanks to @Asura answer, I set up the response headers and solve the problem. This is the code.
if (token == null || !usuarioService.validarSesion(token)) {
((HttpServletResponse) response).setHeader("Access-Control-Allow-Origin", "*");
((HttpServletResponse) response).setHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT, OPTIONS, HEAD");
((HttpServletResponse) response).setStatus(HttpServletResponse.SC_UNAUTHORIZED);
return;
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.