Servlet 필터 (필터 2)

6363 단어 servlet
1. Filter 에서 흔히 볼 수 있 는 응용 (2) --- 캐 시 되 지 않 는 페이지
1. 브 라 우 저 캐 시 모든 동적 페이지 의 필터 금지:
(1) 3 개의 HTTP 응답 헤더 필드 가 현재 페이지 의 브 라 우 저 캐 시 를 금지 할 수 있 습 니 다. Servlet 의 인 스 턴 스 코드 는 다음 과 같 습 니 다. response. setDateHeader ("Expires", - 1);
response.setHeader("Cache-Control","no-cache");
response.setHeader("Pragma","no-cache");
(2) 모든 브 라 우 저가 위의 세 개의 응답 헤드 를 완전히 지원 할 수 있 는 것 은 아니 므 로 위의 세 개의 응답 헤드 를 동시에 사용 하 는 것 이 좋 습 니 다.
(3) Expires 데이터 헤더: 값 은 GMT 시간 값 이 고 - 1 은 브 라 우 저가 페이지 를 캐 시 하지 않 는 것 을 가리킨다.
2. Cache - Control 응답 헤드 는 두 개의 상용 값 이 있 습 니 다.
(1) no - cache 는 현재 페이지 를 캐 시 하지 않 는 브 라 우 저 를 말한다.
(2) max - age: xxx 는 브 라 우 저 캐 시 페이지 xxx 초 를 가리킨다.
실례:
package com.hbsi.filter;

import java.io.IOException;

import javax.servlet.Filter;

import javax.servlet.FilterChain;

import javax.servlet.FilterConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class NoCatchFilter implements Filter {

public void destroy() {

// TODO Auto-generated method stub

}

public void doFilter(ServletRequest request, ServletResponse response,

FilterChain chain) throws IOException, ServletException {

HttpServletRequest req=(HttpServletRequest) request;

HttpServletResponse resp=(HttpServletResponse) response;

resp.setDateHeader("expires",-1);

resp.setHeader("Cache-Control","no-cache");

resp.setHeader("Pragma","no-cache");

chain.doFilter(req, resp);

}


public void init(FilterConfig filterConfig) throws ServletException {

// TODO Auto-generated method stub 

}

}


2. Filter 에서 흔히 볼 수 있 는 응용 (3) --- 브 라 우 저 캐 시 페이지 의 정적 자원 을 제어 하 는 필터
1. 장면: 일부 동적 페이지 에서 일부 그림 이나 css 파일 을 인용 하여 페이지 효 과 를 수식 합 니 다. 이 그림 과 css 파일 은 항상 변 하지 않 기 때문에 서버 의 압력 을 줄 이기 위해 filter 를 사용 하여 브 라 우 저 캐 시 를 제어 하여 서버 의 성능 을 향상 시 킬 수 있 습 니 다.
실례:
package com.hbsi.filter;


import java.io.IOException;


import javax.servlet.Filter;

import javax.servlet.FilterChain;

import javax.servlet.FilterConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class ExpiresFilter implements Filter {

private FilterConfig config;

public void destroy() {

// TODO Auto-generated method stub

}

public void doFilter(ServletRequest request, ServletResponse response,

FilterChain chain) throws IOException, ServletException {

HttpServletRequest req=(HttpServletRequest) request;

HttpServletResponse resp=(HttpServletResponse) response;

String uri=req.getRequestURI();

if(uri.endsWith(".css")){

long time=Integer.parseInt(config.getInitParameter("css"))*1000;

resp.setDateHeader("expries", System.currentTimeMillis()+time);

}else if(uri.endsWith(".jpg")){

long time=Integer.parseInt(config.getInitParameter("jpg"))*1000;

resp.setDateHeader("expries",System.currentTimeMillis()+time);

}else if(uri.endsWith(".js")){

long time=Integer.parseInt(config.getInitParameter("js"))*1000;

resp.setDateHeader("expries",System.currentTimeMillis()+time);

}

chain.doFilter(req, resp);

}

public void init(FilterConfig filterConfig) throws ServletException {

this.config=filterConfig;

}

}


웹. xml 의 필터 설정:
<filter>

 <filter-name>ExpiresFilter</filter-name>

 <filter-class>com.hbsi.filter.ExpiresFilter</filter-class>

 <init-param>

 <param-name>css</param-name>

 <param-value>120</param-value>

 </init-param>

 <init-param>

 <param-name>jpg</param-name>

 <param-value>120</param-value>

 </init-param>

 <init-param>

 <param-name>js</param-name>

 <param-value>120</param-value>

 </init-param>

 </filter>

 <filter-mapping>

 <filter-name>ExpiresFilter</filter-name>

 <url-pattern>*.css</url-pattern>

 </filter-mapping>

 

 <filter-mapping>

 <filter-name>ExpiresFilter</filter-name>

 <url-pattern>*.jpg</url-pattern>

 </filter-mapping>

 

 <filter-mapping>

 <filter-name>ExpiresFilter</filter-name>

 <url-pattern>*.js</url-pattern>

 </filter-mapping>


3. Filter 에서 흔히 볼 수 있 는 응용 (4) --- Filter 를 사용 하여 URL 등급 의 권한 인증 을 실현 합 니 다.
상황: 실제 개발 에서 우 리 는 민감 한 작업 을 수행 하 는 servlet 을 일부 특수 디 렉 터 리 에 투사 하고 filter 로 이 특수 디 렉 터 리 를 보호 하 며 해당 하 는 접근 권한 을 가 진 사용자 만 이 디 렉 터 리 에 있 는 자원 에 접근 할 수 있 도록 제한 합 니 다.따라서 우리 시스템 에서 URL 등급 의 권한 기능 을 실현 합 니 다.
요구: Filter 가 유 니 버 설 성 을 가지 도록 Filter 가 보호 하 는 자원 과 해당 하 는 접근 권한 을 filter 매개 변수 형식 으로 설정 합 니 다.
4. Filter 에서 흔히 볼 수 있 는 응용 (5) --- 자동 로그 인 실현
사용자 가 로그 인 에 성공 한 후에 user 라 는 쿠키 를 클 라 이언 트 에 보 냅 니 다. 쿠키 의 값 은 사용자 이름과 md5 암호 화 된 비밀번호 입 니 다.
AutoLoginFilter 를 만 듭 니 다. 이 filter 는 사용자 가 user 라 는 쿠키 를 가지 고 있 는 지 확인 합 니 다. 있 으 면 dao 를 호출 하여 쿠키 의 사용자 이름과 비밀번호 가 데이터베이스 와 일치 하 는 지, 일치 하 는 지 확인 하고 session 에 user 대상 (즉 사용자 로그 인 태그) 을 저장 하여 프로그램 이 자동 으로 로그 인 합 니 다.

좋은 웹페이지 즐겨찾기