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

marlone Johnathan님의 프로필 이미지

작성한 질문수

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

서블릿 필터 - 인증 체크

whitelist관련 질문올립니다.

작성

·

427

1

안녕하세요. whitelist관련 질문올립니다. 제가 fonts를 사용해서 log가 너무 많이 찍혀 /fonts를 whitelist에 추가했습니다. 그런데 loginCheckFilter에만 넣었는데 logFilter에도 whitelist가 적용되는데 원래 이게 맞나요?

답변 4

1

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

화이트리스트를 잘못 적용하신건 아니실까요?

로그가 많이 찍히신다면 loginCheckFilter가 아니라 logFilter에서 uri가 /fonts 일 경우 로그를 출력하지 않도록 해야 할 것 같습니다.

감사합니다.

0

#LoginCheckFilter

@Slf4j
public class LoginCheckFilter implements Filter {

    private static final String[] whiteList = {"/", "/memberInsertForm", "/login", "/logout", "/css/*", "/img/*", "/fonts/*"};

    @Override
    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);

                    //로그인 성공시 다시 페이지로 돌아오기 위해
                    httpResponse.sendRedirect("/login?redirectURL="+ requestURI);
                    return;
                }
            }

            chain.doFilter(request, response);
        } catch (Exception e){
            throw e;
        }finally{
            log.info("인증 체크 필터 종료 {}", requestURI);
        }

        /**
         * whiteList 의 경우 인증 체크 x
         */


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

}

코드는 이렇습니다. requestURI에 /fonts가 찍히네요..

/fonts 이하 경로가 로그에 남지 않길 원하신다면 조건문(/fonts 이하 경로가 아닐 때)을 만들고 로그를 남기는 작업을 수행해야 합니다.

0

원하는 자원이 아니라 이러한 것들이 찍힙니다. ㅠㅠ

아 그렇게 하니까 해결됐습니다! 감사합니다

0

저 혹시 계속 requestURI에 원하는 자원이 안찍히고 /fonts/***** 이런것들이 찍히는데 원하는 자원으로 찍을 수 있는 방법이 없을까요?

그럼 /fonts로 시작되는 uri는 로그를 찍지 않고, 다음 필터로 넘어가게 처리하시면 될 것 같습니다.

filter에는 exclude pattern을 기능으로 제공하지 않기 때문에 직접 만드셔야 합니다.

fonts로 log를 찍지 않아도 아래 사진처럼 requestURI에 fonts가 붙어서 나오는데 이건 어떻게 해결할 수 있을까요??

필터 코드를 보여주셔야 답변 가능할 것 같습니다.