我遇到了一个问题,LocaleChangeInterceptor中抛出的异常会显示空白页而不是白标错误页。
鉴于以下spring-boot应用程序(我尝试了1.2.5和1.3.0.M2)
@SpringBootApplication
@Controller
public class LocaleChangeErrorDemoApplication extends WebMvcConfigurerAdapter {
@RequestMapping("/show-locale")
@ResponseBody
public String showLocale(Locale locale) {
return "locale: " + locale.toString();
}
@RequestMapping("/show-error")
public void showError() {
throw new RuntimeException("intentional error");
}
@Bean(name = "localeResolver")
public LocaleResolver getLocaleResolver(){
return new CookieLocaleResolver();
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LocaleChangeInterceptor());
}
public static void main(String[] args) {
SpringApplication.run(LocaleChangeErrorDemoApplication.class, args);
}
}
当我致电http://localhost:8080/show-error
时,我看到了弹簧启动白标错误页面,其错误符合预期。
但是,当我通过提供非法语言环境http://localhost:8080/show-locale?locale=.
在LocaleChangeInterceptor中引发异常时,页面保持空白,并且预期的异常(“java.lang.IllegalArgumentException:Locale part”。“包含无效字符”)仅为登录到控制台。
第二种情况是否也应该显示白标错误页?
答案 0 :(得分:0)
我在2天前运行同一个问题,同时运行网站安全测试,这也发生在普通的Spring MVC中。
看起来错误发生在异常解析器可以捕获的内容之外,因此不使用错误页面,我想这在spring boot及其白色标签错误页面"中是相同的。
当我看到它时我感到很惊讶,但后来我认为我可能对处理用户发送完全无效的语言环境的情况不感兴趣,为什么会发生?
但是,如果你想处理这种情况,你应该编写并注册你自己的LocaleChangeInterceptor版本,该版本会捕获并忽略未被original code
中捕获的StringUtils.parseLocaleString的异常。