[SPRING] Spring Boot에서 ErrorPageFilter를 비활성화하는 방법은 무엇입니까?
SPRINGSpring 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.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.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.
@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.나는 소스에서 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.
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); } }
from https://stackoverflow.com/questions/30170586/how-to-disable-errorpagefilter-in-spring-boot by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 필터 콩 클래스에서 일부 콩을 사용하고 계십니까? (0) | 2019.01.04 |
---|---|
[SPRING] 서비스 레이어에서 봄 @ 인증 됨 (0) | 2019.01.04 |
[SPRING] Spring Autowire로 JUnit 테스트를 작성하는 방법은 무엇입니까? (0) | 2019.01.04 |
[SPRING] ClassFile - ArchiveException을 빌드 할 수 없습니다. (0) | 2019.01.04 |
[SPRING] 'transactionManager'라는 이름의 bean이 정의되지 않았습니다. (0) | 2019.01.04 |