如何在春季启动中禁用错误页面过滤器?

2022-09-01 20:01:42

我正在创建一个应该在Tomcat上运行的SOAP服务。
我正在为我的应用程序使用Spring Boot,类似于:

@Configuration
@EnableAutoConfiguration(exclude = ErrorMvcAutoConfiguration.class)
public class AppConfig {
}


我的 Web 服务(示例):

@Component
@WebService
public class MyWebservice {

    @WebMethod
    @WebResult
    public String test() {
        throw new MyException();
    }
}

@WebFault
public class MyException extends Exception {
}


问题:
每当我在 Web 服务类中引发异常时,服务器上都会记录以下消息:

ErrorPageFilter:无法转发到请求 [/services/MyWebservice] 的错误页,因为响应已提交。因此,响应可能具有错误的状态代码。如果您的应用程序在 WebSphere Application Server 上运行,则可以通过将 com.ibm.ws.webcontainer.invokeFlushAfterService 设置为 false 来解决此问题。


问:
如何防止这种情况?


答案 1

要禁用 In Spring Boot(经 1.3.0.RELEASE 测试),请将以下 bean 添加到您的 Spring 配置中:ErrorPageFilter

@Bean
public ErrorPageFilter errorPageFilter() {
    return new ErrorPageFilter();
}

@Bean
public FilterRegistrationBean disableSpringBootErrorFilter(ErrorPageFilter filter) {
    FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
    filterRegistrationBean.setFilter(filter);
    filterRegistrationBean.setEnabled(false);
    return filterRegistrationBean;
}

答案 2

禁用 ErrorPageFilter 的最简单方法是:

@SpringBootApplication
public class App extends SpringBootServletInitializer {

public App() {
    super();
    setRegisterErrorPageFilter(false); // <- this one
}

@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
    return application.sources(App.class);
}

public static void main(String[] args) {
    SpringApplication.run(App.class, args);
}

推荐