Josh 성장일기
article thumbnail
Published 2023. 3. 15. 14:33
Spring Filter에 대하여 Spring

이번 글은 제가 Spring Security 를 공부하면서 Spring의 Filter 기능에 대한 것에 대해 깊이 있게 알지못하여 공부한 내용을 정리하는 포스트입니다. 

Spring Security 에서의 Filter

Spring Security 에서는 서블릿 컨테이너의 Dispatcher Servlet으로 가기전에 먼저 Filter 기능을 사용하여 낚아챈 후 토큰을 확인하여 인증된 사용자인지를 검사합니다.

그리하여 모든 Request 들은 Filter 들이 여러개 연결되어있는 Filter chain을 거친 후에 Servlet 에 도달하여 각자의 url에 해당하는 Controller 들로 분기될 수 있습니다.

 

이 포스트에서는 Security 의 Filter 기능에 초점을 두기보다는 Spring의 Filter 기능에 대하여 알아볼것입니다.

기본기가 부족하기 때문..... ㅠㅠㅠㅠ

 

 

Spring Filter

 

필터는 애플리케이션의 HTTP 요청 및 응답을 가로채는데 사용합니다. 보통은 요청만 가로채는것 같습니다... (잘모르겠는데...) 여튼 필터는 스프링 컨텍스트 외부에서 request와 response의 해당하는 작업을 가로채어 공통 로직을 수행합니다. 

 

필터의 경우 아래의 메소드들을 상황에 따라 @Override 한 후에 사용하면 됩니다.

@Override
public void init(FilterConfig filterConfig) throws ServletException {
    //필터를 웹 컨테이너 생성 후 초기화할 때 호출된다.
    //이 메소드의 매개변수는 FilterConfig의 인스턴스이다. 이 인스턴스를 통해 필터 초기화 매개변수의 값을 꺼낼 수 있다. 
    //위 코드에서는 doFilter()에서 사용하기 위해 인스턴스 변수 config에 저장한다.
    FilterConfig config;
}

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    //필터체인으로 연결해준다. 체인의 경우 순서를 지정할 수 있다. 체인의 가장 마지막에는 클라이언트가 요청한 최종 자원이 위치한다.
    //필터와 핑된 URL에 요청이 들어올때마다 doFilter()가 호출된다. 이 메소드에서는 필터가 할 작업을 작성한다.
    //filterChain은 다음 필터를 가리키고 filterChain.doFilter()는 다음 필터를 호출한다. 다음 필터가 없다면 내부적으로 서블릿의 service()를 호출한다.
    //서블릿이 실행되기 전에 처리할 작업은 filterChain.doFilter() 이전에, 서블릿이 실행된 후에 처리할 작업은 filterChain.doFilter() 이후에 작성한다.
    HttpServletRequest req = (HttpServletRequest) request;
    HttpServletResponse rep = (HttpServletResponse) response;
    HttpSession session = req.getSession();

    String uri = req.getRequestURI();
    String contextPath = req.getContextPath();
    Account account = (Account) session.getAttribute("account");

    chain.doFilter(request, response);
}

@Override
public void destroy() {
    // 필터가 웹 컨테이너에서 삭제될 때 호출된다.
}
profile

Josh 성장일기

@JoshDev

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그