강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của mongddangand9429
mongddangand9429

câu hỏi đã được viết

Spring MVC Phần 2 - Kỹ thuật vận dụng phát triển Web Backend

Servlet Filter - Kiểm tra xác thực

whitelist관련 질문올립니다.

Viết

·

519

1

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

MVCspring

Câu trả lời 4

1

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

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

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

감사합니다.

0

marlone Johnathan님의 프로필 이미지
marlone Johnathan
Người đặt câu hỏi

#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

marlone Johnathan님의 프로필 이미지
marlone Johnathan
Người đặt câu hỏi

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

marlone Johnathan님의 프로필 이미지
marlone Johnathan
Người đặt câu hỏi

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

0

marlone Johnathan님의 프로필 이미지
marlone Johnathan
Người đặt câu hỏi

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

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

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

marlone Johnathan님의 프로필 이미지
marlone Johnathan
Người đặt câu hỏi

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

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

Hình ảnh hồ sơ của mongddangand9429
mongddangand9429

câu hỏi đã được viết

Đặt câu hỏi