반응형
이번 강의에서 인증 체크 필터를 개발했다.
공모전을 진행할 때 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편 - 백엔드 웹 개발 활용 기술을 참고하여 공부하였습니다.
반응형
'Framework & Library > Spring Boot' 카테고리의 다른 글
[Spring Boot] : 스프링 인터셉터 - 요청 로그 (0) | 2022.02.23 |
---|---|
[Spring Boot] : 스프링 인터셉터 (0) | 2022.02.23 |
[Spring Boot] : Servlet Filter 요청 로그 확인하기 (0) | 2022.02.22 |
[Spring Boot] : Servlet Filter (0) | 2022.02.22 |
[Spring Boot] : Session TimeOut 설정하기 (0) | 2022.02.22 |
댓글