Spring Security가 액세스를 풀면 @ExceptionHandler로 처리 할 수없는 이야기 (하지만 Spring Boot는 처리한다)

소개



최근 Spring을 만질 기회가 있었다. Java는 5보다 전의 시대에서도 제대로 프로그램 쓴 적이 없는 화석이므로 어노테이션이나 메소드 체인이라든지 1 「현대적인 Java」를 Qiita의 선인방의 기사를 참고로 습득했습니다.

그래서, 만들려는 시스템이지만 다음과 같은 느낌입니다.
  • 사용자 인증을 수행합니다. 이것은 Spring Security 사용하면 좋은 것 같다.
  • 역할도 사용해 특정 페이지에는 관리자 밖에 액세스 할 수 없게 한다.
  • 에러 페이지는 Spring Boot가 내고 있는 것 같지만 디폴트인 채로는 물론 안 되기 때문에 에러 핸들링을 실시한다.

  • 그래서 마지막 오류 처리 방법을 살펴보면 @ExceptionHandler 어노테이션을 붙이면 좋다는 것을 알았습니다. 라는 곳까지가 전치.

    또한 지금부터 설명하는 코드(상황 재현 코드)의 전체는 github에 두었습니다.
    htps : // 기주 b. 코 m / Junji s0203 / sp ring-sekuri ty-Boo t-Ero r-E-MP

    우선 @ExceptionHandler 사용해보기


    @ExceptionHandler 어노테이션으로 반환 값은 문자열로 뷰 이름을 반환하도록했습니다.

    CommonControllerAdvice.java
        @ExceptionHandler
        @ResponseStatus(code = HttpStatus.INTERNAL_SERVER_ERROR)
        public String handle(Exception e) {
            logger.error(e.toString());
            return "error";
        }
    

    관리자 권한 부여하지 않은 사용자로 액세스하여 제대로 반환하는 뷰가 표시되어 있는지 확인.



    그런데 Exception과 대미에 잡혀 버렸지만 실제로 어떤 예외가・・・
    어라? (.´・ω・)? 로그가 나오지 않는다. 로그 설정 이상한 것일까.

    Spring Security '와이야에서'



    ? ? ? 「도대체 언제부터, 에러 핸들링 할 수 있다고 착각하고 있었다」
    사와다 「너는!?」

    Spring Security "그 요청은 내가 필터링했습니다. 즉 컨트롤러에 도착하지 않았습니다."
    사와다「뭐, 뭐라고―! 그럼 왜 스스로 쓴 뷰가 표시되는 거야」

    Spring Boot '와이어로'



    Spring Boot 「아, 그렇게 하고 있는 걸」
    사와다「에?」
    Spring Boot 「. "
    사와다 「error.html 쓰는 건 쓰지 않아」
    Spring Boot 「 여기 참조」

    해결책



    그래서 Spring Security를 ​​사용하여 액세스를 제어했을 때 권한 오류를 잡을 수는 없지만 Spring Boot는 잡을 수 있다는 것을 알았습니다.
    나로서는 「왜 권한 에러가 핸들링되지 않는 것인가」와 「왜 핸들링되지 않은데 스스로 쓴 페이지가 표시되는 것인가」마저 명확하게 되면 좋았기 때문에 error/403.html 를 두어 액세스권이 없는 것 을 알리게 했습니다.

    후기



    조금 전에 쓴 Sinatra의 이야기 등, 개인적으로 「프로그래밍 기법」에 관한 화제는 정말 좋아하므로 그 점 Spring은 매우 재미있네요.
    또, 「로 이것 결국 어떻게 움직이고 있는 거야?」라고 코드를 읽는 것도 정말 좋아합니다만, Spring의 숲은 너무 깊네요. 본체에 도착하기 전에 인터페이스와 추상 클래스가 몇 개 있는 것인가. 하지만 별건으로 소스 탐색을 조금 해 둔 덕분에 이번 BasicErrorController에는 비교적 빨리 도착할 수 있었습니다(웃음)



    JUnit4는 본 적이 있기 때문에 주석을 많이 사용한 프로그래밍에 대해서는 적당히 지견이있었습니다. 소스 코드

    좋은 웹페이지 즐겨찾기