package org.lognavigator.mvc; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.lognavigator.exception.ConfigException; import org.lognavigator.util.Constants; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.security.access.AccessDeniedException; import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerExceptionResolver; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.util.HtmlUtils; /** * Component which process all errors that controllers throw */ @Component public class LogNavigatorHandlerExceptionResolver implements HandlerExceptionResolver { private static final Logger LOGGER = LoggerFactory.getLogger(LogNavigatorHandlerExceptionResolver.class); @Override public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception exception) { LOGGER.error("Error when calling web action", exception); // Compute error message to display String errorTitle = exception.getClass().getSimpleName().replaceFirst("(Error|Exception)", " Error"); String errorMessage = HtmlUtils.htmlEscape(exception.getMessage()).replace("\n", "<br/>"); ModelAndView modelAndView = new ModelAndView(Constants.VIEW_ERROR); modelAndView.addObject(Constants.ERROR_TITLE_KEY, errorTitle); modelAndView.addObject(Constants.ERROR_MESSAGE_KEY, errorMessage); if (exception instanceof AccessDeniedException || exception instanceof ConfigException) { modelAndView.addObject(Constants.BLOCKING_ERROR_KEY, Boolean.TRUE); } return modelAndView; } }