• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

AccessDeniedHandler를 직접 구현하여 인가 예외 처리에 대한 질문입니다.

20.05.13 23:23 작성 조회수 235

2

안녕하세요

Spring Security ExceptionTranslationFilter 강의 09:00 부터 진행하는 내용을 듣고 질문사항이 생겨  글을 남깁니다.

인증/인가 예외 처리 필터인 ExceptionTranslationFilter 기능 중 AccessDeniedException(인가 처리 실패 예외)에 대해 

예외를 처리할 수 있는 페이지를 설정하는 방법과, AccessDeniedHandler를 직접 구현해서 사용하는 방법이 있었는데요.

accessDeniedHandler() 메소드를 사용하지 않고 accessDeniedPage() 메소드를 사용하여 URL을 지정하고,

Controller와 HandlerMethod를 구현하였습니다.

이때 HandlerMethod의 인자로 Principal 객체, Model 객체 외 HttpServletRequest 객체를 넘겨 받아 AccessDeniedHandler를 직접 구현한 것과 마찬가지로 "로그 출력", "VIEW에서 인증된 사용자 정보와 함께 에러 메시지 출력"을 하였는데요.

이렇게만 본다면 AccessDeniedHandler를 직접 구현하는 것과 예외를 처리할 수 있는 페이지를 설정하여 HandlerMethod에서 처리하는 것의 차이가 없어 보였습니다.

AccessDeniedHandler를 직접 구현하여 얻을 수 있는 추가적인 장점이 있을까요?

미리 답변 감사드립니다.

답변 1

답변을 작성해보세요.

1

인가 처리 에러 핸들러에 어떤 로직을 넣을거냐에 달린거죠. 말씀하신대로 단순하게만 구현할꺼라면 굳이 구현할 필요없이 스프링 시큐리티가 기본으로 제공하는 기능 그대로 쓰면 되지만, "가령 3회 이상 인증 에러 발생시 해당 계정을 사용하지 못하게 막고 반드시 패스워드를 변경해야만 접근할 수있도록 한다."와 같은 로직을 구현하려면 보여주신 코드에 조금 더 로직을 추가할 수 있겠죠.