본문 바로가기
Framework & Library/Spring Boot

[Spring Boot] : Servlet Filter 인증 체크하기

by 오주현 2022. 2. 22.
반응형

이번 강의에서 인증 체크 필터를 개발했다.

공모전을 진행할 때 Filter를 전혀 알지 못 하고 있었는데.. 역시 좋은 기술은 많다.

 

private static final String[] whitelist = {"/", "/members/add", "/login", "/logout", "/css/*"};

화이트 리스트라는 것을 우선 만들어 주었다.

 

private boolean isLoginCheckPath(String requestURI) {
    return !PatternMatchUtils.simpleMatch(whitelist, requestURI);
}

화이트 리스트는 이 로직을 통해 검증이 된다. 화이트 리스트일 경우 인증 체크를 하지 않도록 하여 로그인 페이지나 로그아웃 페이지 등 화이트 리스트에 추가한 페이지에 대해서는 접근이 가능하도록 설정을 해 주었다.

 

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);
  }

거의 이 부분이 핵심 로직이다. 미사용 인증자가 만약 item 페이지에 접근하려고 했는데 로그인을 안 했기 때문에 로그인 페이지로 이동이 되었다. 그럼 사용자는 로그인을 하고 다시 item 페이지를 찾아 들어가야 하지만

 

httpResponse.sendRedirect("/login?redirectURL=" + requestURI); 이런 로직을 통해 원래 접근하고자 했던 페이지로 로그인 후 바로 이동이 되도록 설정해 줄 수 있었다.

 

이런 기능을 위해 현재 요청 경로인 requestURI를 /login에 쿼리 파리미터로 전달했다.

 

public String loginV4(@Valid @ModelAttribute LoginForm form, BindingResult bindingResult,
                          @RequestParam(defaultValue = "/") String redirectURL,

로그인 컨트롤러에 가보면 @RequestParam(defaultValue = "/") String redirectURL를 적어주었고

 

return "redirect:" + redirectURL;

이렇게 원래 진입하고자 했던 페이지 URL을 붙여 리턴해주어 로그인 후 자동으로 페이지 접근이 가능하게 된 것이다.


스프링 MVC 2편 - 백엔드 웹 개발 활용 기술을 참고하여 공부하였습니다.

반응형

댓글