복붙노트

[SPRING] Spring Boot에서 ErrorPageFilter를 비활성화하는 방법은 무엇입니까?

SPRING

Spring Boot에서 ErrorPageFilter를 비활성화하는 방법은 무엇입니까?

Tomcat에서 실행되어야하는 SOAP 서비스를 만들고 있습니다. 내 응용 프로그램을 위해 Spring Boot를 사용하고있다.

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

내 웹 서비스 (예) :

@Component
@WebService
public class MyWebservice {

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

@WebFault
public class MyException extends Exception {
}

문제: webservice 클래스 내에 예외가 발생할 때마다 다음 메시지가 서버에 기록됩니다.

의문: 이 문제를 어떻게 방지 할 수 있습니까?

해결법

  1. ==============================

    1.Spring Boot (1.3.0.RELEASE로 테스트 됨)에서 ErrorPageFilter를 사용하지 않으려면 Spring 설정에 다음 빈을 추가하십시오 :

    Spring Boot (1.3.0.RELEASE로 테스트 됨)에서 ErrorPageFilter를 사용하지 않으려면 Spring 설정에 다음 빈을 추가하십시오 :

    @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. ==============================

    2.ErrorPageFilter를 비활성화하는 가장 간단한 방법은 다음과 같습니다.

    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);
    }
    
  3. ==============================

    3.

        @SpringBootApplication
    public class MyApplication extends SpringBootServletInitializer {
        @Override
        protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
            //set register error pagefilter false
            setRegisterErrorPageFilter(false);
    
            builder.sources(MyApplication.class);
            return builder;
        }
    
    }
    
  4. ==============================

    4.나는 소스에서 ErrorPageFilter.java에 다음 코드가 있음을 발견했다.

    나는 소스에서 ErrorPageFilter.java에 다음 코드가 있음을 발견했다.

    private void doFilter(HttpServletRequest request, HttpServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        ErrorWrapperResponse wrapped = new ErrorWrapperResponse(response);
        try {
            chain.doFilter(request, wrapped);
            int status = wrapped.getStatus();
            if (status >= 400) {
                handleErrorStatus(request, response, status, wrapped.getMessage());
                response.flushBuffer();
            }
            else if (!request.isAsyncStarted() && !response.isCommitted()) {
                response.flushBuffer();
            }
        }
        catch (Throwable ex) {
            handleException(request, response, wrapped, ex);
            response.flushBuffer();
        }
    }
    

    예외를 throw하고 응답 코드가 400 이상이면 반환되는 코드를 볼 수 있습니다. 응답이 이미 커밋되었거나 아닌지 확인하려면 추가 확인이 필요합니다.

    ErrorPageFilter를 제거하는 방법은 다음과 같습니다.

    protected WebApplicationContext run(SpringApplication application) {
        application.getSources().remove(ErrorPageFilter.class);
        return super.run(application);
    }
    

    크리스

  5. ==============================

    5.

    public class Application extends SpringBootServletInitializer 
    {
       private static final Logger logger = LogManager.getLogger(Application.class);
    
       public Application()
       {
           super();
           setRegisterErrorPageFilter(false);
       }
    
        @Override
        protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
            return application.sources(Application.class);
        }
    
        public static void main(String[] args) throws Exception {
            SpringApplication.run(Application.class, args);
        }
    }
    
  6. from https://stackoverflow.com/questions/30170586/how-to-disable-errorpagefilter-in-spring-boot by cc-by-sa and MIT license