-
카테고리
-
세부 분야
백엔드
-
해결 여부
미해결
필터가 제가 이해한게 맞을까요?
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