I found solutions to redirect http 404 responses for defined url pattern using Filters and HttpServletResponseWrapper.
In spring boot define filter for pattern.
@Bean
public FilterRegistrationBean<LoginFilter> loginFilter(){
FilterRegistrationBean<LoginFilter> registrationBean = new FilterRegistrationBean<>();
registrationBean.setFilter(new LoginFilter());
registrationBean.addUrlPatterns("/login/*");
return registrationBean;
}
In filter instance create HttpServletResponseWrapper and override sendError's methods to redirect all 404 responses. Filters look as follow:
public class LoginFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest,ServletResponse servletResponse,
FilterChain chain) throws IOException, ServletException {
HttpServletResponseWrapper servletResponseWrapper = new HttpServletResponseWrapper((HttpServletResponse) servletResponse) {
@Override
public void sendError(int sc, String msg) throws IOException {
if (sc == 404) {
sendRedirect();
} else {
super.sendError(sc, msg);
}
}
@Override
public void sendError(int sc) throws IOException {
if (sc == 404) {
sendRedirect();
} else {
super.sendError(sc);
}
}
private void sendRedirect() throws IOException {
((HttpServletResponse)getResponse()).sendRedirect("/login");
}
};
chain.doFilter(servletRequest, servletResponseWrapper);
}
}