• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

필터가 제가 이해한게 맞을까요?

24.03.18 23:39 작성 24.03.18 23:52 수정 조회수 134

0

@Slf4j
public class LoginCheckFilter implements Filter {

    private static final String[] whiteList = {"/","/members/add","/login","/logout","/css/*"};//위 uri 들은 필터x
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) 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){//null 이면 로그인 안된것
                    log.info("미인증 사용자 요청 {}", requestURI);
                    //로그인으로 redirect + 내가 url에 입력한 주소
                    httpResponse.sendRedirect("/login?redirectURL=" + requestURI);
                    return;//리다이렉트하고 끝(finally 항상 호출)
                }
            }

            log.info("다음 필터");
            filterChain.doFilter(request,response);
            log.info("다음 필터가 있는지");
        }catch (Exception e){
            throw e;//예외 로깅 가능 하지만, 톰캣까지 예외를 보내주어야 함
        }finally {
            log.info("인증 체크 필터 종료 {}", requestURI);
        }
    }

    /**
     * 화이트 리스트의 경우 인증 체크x
     */
    private boolean isLoginCheckPath(String requestURI){
        return !PatternMatchUtils.simpleMatch(whiteList,requestURI);
    }
}

이 코드에서

controller를 호출하기전에 필터에서 인증을 처리해주고

인증이 완료됐다면

controller로 이동해서 로직을 처리한다 생각하면 될까요?

답변 1

답변을 작성해보세요.

0

OMG님의 프로필

OMG

2024.03.19

안녕하세요. 자바마스터하자님, 공식 서포터즈 OMG입니다.

네, 이해하신게 맞습니다 😀

감사합니다.