spring boot Filter 필터 구성 방법

Filter 필터는 웹 개발에서 매우 중요한 구성 요소입니다. 다음은session 로그인의 예로spring boot에서 Filter를 어떻게 사용하는지 소개합니다.
우선 Filter의 인터페이스를 구현한 클래스 SessionFilter를 준비해야 합니다.

import org.slf4j.LoggerFactory;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Created by mazhenhua on 2016/12/27.
 *
 *  
 */
public class SessionFilter implements Filter {
  private static final org.slf4j.Logger logger = LoggerFactory.getLogger(SessionFilter.class);


  /**
   *  , list 
   */
  protected static List<Pattern> patterns = new ArrayList<Pattern>();

  @Override
  public void init(FilterConfig filterConfig) throws ServletException {

  }

  @Override
  public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {
    HttpServletRequest httpRequest = (HttpServletRequest) servletRequest;
    HttpServletResponse httpResponse = (HttpServletResponse) servletResponse;
    logger.info("aaaaaaaaaa");
    String url = httpRequest.getRequestURI().substring(httpRequest.getContextPath().length());
    if (url.startsWith("/") && url.length() > 1) {
      url = url.substring(1);
    }

    if (isInclude(url)){
      chain.doFilter(httpRequest, httpResponse);
      return;
    } else {
      HttpSession session = httpRequest.getSession();
      if (session.getAttribute("") != null){
        // session 
        chain.doFilter(httpRequest, httpResponse);
        return;
      } else {
        // session   
        /* RequestDispatcher dispatcher = request.getRequestDispatcher(path);
          dispatcher.forward(request, response);*/
        chain.doFilter(httpRequest, httpResponse);
        return;
      }
    }


  }

  @Override
  public void destroy() {

  }


  /**
   *  
   * @param url
   * @return
   */
  private boolean isInclude(String url) {
    for (Pattern pattern : patterns) {
      Matcher matcher = pattern.matcher(url);
      if (matcher.matches()) {
        return true;
      }
    }
    return false;
  }

}

실제 개발에서 종종 많은 요청이 직접 요청해야 하기 때문에 감권 로그인이 필요하지 않기 때문에 코드에서 이런 요청의 코드를 필터하여list에 넣으면 된다.

  /**
   *  
   * @return
   */
  @Bean
  public FilterRegistrationBean someFilterRegistration() {
    FilterRegistrationBean registration = new FilterRegistrationBean();
    registration.setFilter(sessionFilter());
    registration.addUrlPatterns("/*");
    registration.addInitParameter("paramName", "paramValue");
    registration.setName("sessionFilter");
    return registration;
  }

  /**
   *  bean
   * @return
   */
  @Bean(name = "sessionFilter")
  public Filter sessionFilter() {
    return new SessionFilter();
  }

위의 두 단계의 설정을 거치면 필터는 기본적으로 된다.
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.

좋은 웹페이지 즐겨찾기