강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

dduckmane님의 프로필 이미지
dduckmane

작성한 질문수

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

서블릿 필터 - 인증 체크

예외전가

작성

·

251

1

public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
 HttpServletRequest httpRequest = (HttpServletRequest) request;
 String requestURI = httpRequest.getRequestURI();
 HttpServletResponse httpResponse = (HttpServletResponse) response;
 try {
 log.info("인증 체크 필터 시작 {}", requestURI);
 if (isLoginCheckPath(requestURI)) {
 log.info("인증 체크 로직 실행 {}", requestURI);
 HttpSession session = httpRequest.getSession(false);
 if (session == null ||
session.getAttribute(SessionConst.LOGIN_MEMBER) == null) {
 log.info("미인증 사용자 요청 {}", requestURI);
 //로그인으로 redirect
 httpResponse.sendRedirect("/login?redirectURL=" +
requestURI);
 return; //여기가 중요, 미인증 사용자는 다음으로 진행하지 않고 끝!
 }
 }
 chain.doFilter(request, response);
 } catch (Exception e) {
 throw e; //예외 로깅 가능 하지만, 톰캣까지 예외를 보내주어야 함
 } finally {
 log.info("인증 체크 필터 종료 {}", requestURI);
 }

여기서 throw e해서 예외를 던지면 doFilter에서 LogFilter로 예외를 전가할텐데

LogFilter는 예외전가구문이 없는데 어떻게 was까지 예외를 전가할 수 있는 지 궁금합니다. 

답변 1

1

안녕하세요. dduckmane님, 공식 서포터즈 David입니다.

이전 강의에서는 예외를 다시 던지고 있습니다.

예외를 catch했을 때 catch 블록 내부에서 다시 예외를 던지지 않게 되면 거기서 예외는 처리된 것으로 간주됩니다. 만약 강의와 달리 LogFilter에서 별도로 예외를 catch 하지 않았다면 호출 스택을 따라 전파되는 게 정상입니다.

감사합니다.

dduckmane님의 프로필 이미지
dduckmane

작성한 질문수

질문하기