Servlet 필터 사용

4927 단어 servletfilter
Filter 는 Servlet 의'강화 판'으로 볼 수 있 으 며,주로 사용자 요청 에 대한 사전 처리 에 사용 되 며,HttpServletResponse 를 사후 처리 할 수 있 는 전형 적 인 처리 체인 이다.Filter 도 사용자 요청 에 해당 하 는 생 성 을 할 수 있다 는 점 은 Servlet 과 같 지만 실제로 이렇게 사용 하 는 경 우 는 드물다.Filter 를 사용 하 는 전체 프로 세 스 는 Filter 가 사용자 의 요청 을 미리 처리 한 다음 에 Servlet 에 요청 을 맡 겨 처리 하고 생 성 에 응답 하 는 것 입 니 다.마지막 으로 Filter 는 서버 응답 을 처리 한 후에 처리 합 니 다.
1.Filter 는 다음 과 같은 몇 가지 용도 가 있 습 니 다.
  • Http ServletRequest 가 Servlet 에 도착 하기 전에 고객 의 Http ServletRequest
  • 를 차단 합 니 다.
  • 필요 에 따라 HttpServletRequest 를 검사 하고 HttpServletRequest 의 머리 와 데 이 터 를 수정 할 수 있 습 니 다
  • HttpServletResponse 가 클 라 이언 트 에 도착 하기 전에 HttpServletResponse
  • 를 차단 합 니 다.
  • 필요 에 따라 HttpServletResponse 를 검사 하고 HttpServletResponse 의 머리 와 데이터
  • 를 수정 할 수 있 습 니 다.
    2.Filter 는 다음 과 같은 몇 가지 종류 가 있 습 니 다.
  • 사용자 가 권한 을 수 여 받 은 Filter:Filter 는 사용자 의 요청 을 검사 하고 요청 에 따라 사용자 의 불법 요청 을 걸 러 내 며 권한 관리 에 사 용 됩 니 다.
  • 로그 Filter:일부 특수 한 사용자 요청 을 상세 하 게 기록 합 니 다
  • 디 코딩 을 담당 하 는 Filter:비표 준 인 코딩 에 대한 요청 디 코딩 포함
  • XML 내용 을 바 꿀 수 있 는 XSLT Filter 등
  • 3.Filter 를 만 드 는 데 두 단계 만 있 으 면 됩 니 다.
    1).Filter 처리 클래스 만 들 기 2).웹.xml 파일 에 Filter 를 설정 합 니 다.
    3.1 Filter 처리 클래스 만 들 기
    Filter 를 만 들 려 면 javax.servlet.Filter 인 터 페 이 스 를 실현 해 야 합 니 다.이 인터페이스 에서 다음 과 같은 세 가지 방법 을 정의 합 니 다.
  • void init(FilterConfig config):Filter 초기 화 완료
  • void destroy():Filter 에서 돈 을 소각 하고 일부 자원 의 회수 완료
  • void doFilter(ServletRequest request,ServletResponse response,FilterChain chain):필터 기능 을 실현 합 니 다.이 방법 은 모든 요청 및 응답 증가 에 대한 추가 처리
  • 입 니 다.
    다음은 로그 Filter 입 니 다.모든 사용자 의 요청 을 차단 하고 요청 한 정 보 를 로그 에 기록 합 니 다.
    @WebFilter(filterName="log", urlPatterns={"/*"}, initParams={ //           Filter
      @WebInitParam(name="encoding" value="UTF-8"),
      @WebInitParam(name="loginPage" value="/login.jsp")
    }) 
    public class LogFilter implements Filter {
      private FilterConfig config;//FilterConfig     Filter     
      public void init(FilterConfig config) { this.config = config; }
      public void destroy(){this.config = null;}
      public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException{
        //                 
        ServletContext context = this.config.getServletContext();//  ServletContext  ,      
        long before = System.currentTimeMillis();
        System.out.println("    ...");
        HttpServletRequest request = (HttpServletRequest)req;
        System.out.println("            :" + request.getServletPath());
        chain.doFilter(req, resp);//Filter      ,           
     
        //                  
        long after = System.currentTimeMillis();
        System.out.println("    ");
        System.out.println("      :" + request.getRequestURI() + "   :" + (after - before));//          
      }
    }

    위의 코드 는 doFilter()방법 을 실 현 했 습 니 다.이 방법 은 사용자 가 요청 한 예비 처 리 를 실현 할 수 있 고 서버 에 대한 응답 후 처 리 를 실현 할 수 있 습 니 다.그들의 경계선 은 chain.doFilter()방법 을 호출 했 는 지 여부 입 니 다.그 전에 사용자 가 요청 한 예비 처 리 였 습 니 다.그 다음 에 서버 에 대한 응답 후 처 리 였 습 니 다.필터 가 필 터 를 요청 한 후에 도 목적 주소 로 요청 을 보 냅 니 다.검사 권한 이 필요 하 다 면 필터 에서 사용자 가 요청 한 HttpSession 에 따라 사용자 권한 이 충분 한 지 판단 할 수 있다.권한 이 부족 하면 바로 방향 을 바 꾸 면 됩 니 다.chain.doFilter()방법 을 호출 할 필요 가 없습니다.
    3.2 필터 설정
    Filter 의 웹.xml 설정 은 Servlet 의 웹.xml 설정 과 비슷 합 니 다.하나의 Servlet 는 보통 하나의 URL 만 설정 하고 Filter 는 여러 요청 의 URL 을 동시에 차단 할 수 있 기 때문에 Filter 의 url Patterns 를 설정 할 때 패턴 문자열 을 사용 하여 Filter 가 여러 요청 을 차단 할 수 있 도록 합 니 다.Servlet 와 비슷 한 것 은 Filter 를 설정 하 는 데 도 두 가지 방법 이 있 습 니 다.1)Filter 클래스 에서 주 해 를 통 해 설정 합 니 다. 2).웹.xml 파일 에서 설정
    @WebFilter 가 지원 하 는 일반적인 속성 소개:
  • asyncSupported:이 필터 가 비동기 작업 모드 를 지원 하 는 지 지정 합 니 다
  • dispatcher Types:이 Filter 를 지정 하면 dispatcher 모드 의 요청 만 걸 러 냅 니 다.이 속성 은 ASYNC,ERROR,FORWARD,INCLUDE,REQUEST 등 5 개 값 의 임 의 조합 을 지원 합 니 다.기본 값 은 이 5 개 모드 의 요청 을 동시에 걸 러 내 는 것 입 니 다
  • .
  • display Name:이 필터 의 표시 이름 을 지정 합 니 다
  • filter Name:이 필터 의 이름 을 지정 합 니 다
  • initParams:이 필터 설정 인자
  • servletNames:이 속성 은 여러 개의 Servlet 이름 을 지정 할 수 있 습 니 다.이 필 터 를 지정 하여 이 Servlet 만 필터 할 수 있 습 니 다
  • url Patterns/value:이 두 속성의 역할 은 똑 같 습 니 다.이 Filter 가 차단 한 URL
  • 을 지정 하 는 데 사 용 됩 니 다.
    다음은 웹.xml 에 Filter 를 설정 하 는 예 입 니 다.
    <filter>
      <filter-name>log</filter-name> <!--       @WebFilter  filterName   -->
      <filter-class>com.abc.LogFilter</filter-class>  <!-- Filter     -->
      <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
      </init-param>
      <init-param>
        <param-name>loginPage</param-name>
        <param-value>/login.jsp</param-value>
      </init-param>
    </filter>
    <filter-mapping>
      <filter-name>log</filter-name>
      <url-pattern>/*</url-pattern> <!--        URL,   @WebFilter  urlPatterns   -->
    </filter-mapping>

    좋은 웹페이지 즐겨찾기