我使用spring boot和spring security,我想为我的应用程序添加错误处理程序,这是我的ControllerAdvice:
@ControllerAdvice
public class GlobalExceptionController {
public static final String DEFAULT_ERROR_VIEW = "error";
@ExceptionHandler(Exception.class)
public ModelAndView defaultError(HttpServletRequest req, Exception e)
throws Exception {
if (AnnotationUtils.findAnnotation(e.getClass(), ResponseStatus.class) != null)
throw e;
ModelAndView mav = new ModelAndView();
mav.addObject("exception", e);
mav.addObject("url", req.getRequestURL());
mav.setViewName(DEFAULT_ERROR_VIEW);
return mav;
}
}
这是我的代码段error.html代码(使用百日咳):
<div class="container">
<h1 th:inline="text">Error</h1>
<p th:text="${exception}"></p>
<p th:text="${url}"></p>
</div>
和今年春天的安全配置代码段:
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().antMatchers("/login").permitAll().anyRequest()
.fullyAuthenticated().and().formLogin().loginPage("/login")
.failureUrl("/login?error").and().logout()
.logoutRequestMatcher(new AntPathRequestMatcher("/logout")).and()
.exceptionHandling().accessDeniedPage("/access?error");
}
如果我尝试访问我的应用程序使用错误的URL,GlobalExcetionController中的对象异常和url不会在error.html中呈现,为什么?
[UPDATE]
我的ControllerAdvice仅在错误404时才起作用,但是其他错误有效,如何设置ExceptionHandler来处理404错误?
答案 0 :(得分:0)
[解决]
我将这个@Bean添加到我的spring boot config
@Bean
public EmbeddedServletContainerCustomizer containerCustomizer() {
return new EmbeddedServletContainerCustomizer() {
@Override
public void customize(ConfigurableEmbeddedServletContainer container) {
ErrorPage error404Page = new ErrorPage(HttpStatus.NOT_FOUND,
"/error404.html");
container.addErrorPages(error404Page);
}
};
}
for error404.html必须位于静态文件夹
感谢参考: http://www.sporcic.org/2014/05/custom-error-pages-with-spring-boot/