복붙노트

[SPRING] 스프링 MVC 스프링 보안과 에러 처리

SPRING

스프링 MVC 스프링 보안과 에러 처리

저는 Spring에서 잘못된 요청을 처리하고 싶다는 점을 제외하고는 오류를 처리하고 거의 정상적으로 작동하는 ResponseEntityExceptionHandler를 사용하고 있습니다. handleNoSuchRequestHandlingMethod를 오버라이드하는 로직이이를 처리해야하지만 핸들링은 항상 get

콘솔에서 디버깅을 활성화하면 다음과 같이됩니다.

WARN : org.springframework.web.servlet.PageNotFound - URI가있는 HTTP 요청에 대한 매핑이 없습니다.

처리하여 명확히하기 위해 JSON을 반환한다는 의미입니다.

어떤 생각이 어떻게 처리 할 수 ​​있습니까?

해결법

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

    1.그 이유는 바로 DispatcherServlet 클래스에 있기 때문입니다. 예외 처리기를 호출하지 않고 오류 응답을 보냅니다 (기본적으로).

    그 이유는 바로 DispatcherServlet 클래스에 있기 때문입니다. 예외 처리기를 호출하지 않고 오류 응답을 보냅니다 (기본적으로).

    4.0.0.RELEASE 이후이 동작은 단순히 throwExceptionIfNoHandlerFound 매개 변수로 변경 될 수 있습니다.

    XML 구성 :

    <servlet>
        <servlet-name>rest-dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>throwExceptionIfNoHandlerFound</param-name>
            <param-value>true</param-value>
        </init-param>
    </servlet>
    

    Java 기반 구성 :

    public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
    
        void customizeRegistration(ServletRegistration.Dynamic registration) {
            registration.setInitParameter("throwExceptionIfNoHandlerFound", "true");
        }
        ...
    }
    

    다음과 같이 NoHandlerFoundException을 처리 할 수 ​​있습니다.

    @ControllerAdvice
    public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {
    
        @Override
        ResponseEntity handleNoHandlerFoundException(NoHandlerFoundException ex,
                HttpHeaders headers, HttpStatus status, WebRequest request) {
            // return whatever you want
        }
    }
    
  2. ==============================

    2.throwExceptionIfNoHandlerFound는 요청에 대한 핸들러가없는 경우에만 고려합니다.

    throwExceptionIfNoHandlerFound는 요청에 대한 핸들러가없는 경우에만 고려합니다.

    default-servlet-handler가 구성된 경우 DefaultServletHttpRequestHandler가 요청을 처리합니다. 따라서이 솔루션이 작동하지 않으면 제거하고 DispatcherServlet의이 위치를 살펴 봅니다 (디버그).

  3. from https://stackoverflow.com/questions/18322279/spring-mvc-spring-security-and-error-handling by cc-by-sa and MIT license