java 에서 자주 사용 하 는 Filter

9898 단어
문자 인 코딩 필터 
package com.zhaokuo.filter;

import java.io.IOException;

import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

/**
 * @author    2012-6-11
 * 
 *      HTTP           ,       encoding          ,    Html Form          
 */
public class CharacterEncodingFilter extends AbstractFilter {
	protected FilterConfig filterConfig = null;
	protected String encoding = "";

	public void doFilter(ServletRequest servletRequest,
			ServletResponse servletResponse, FilterChain filterChain)
			throws IOException, ServletException {
		if (encoding != null)
			servletRequest.setCharacterEncoding(encoding);
		filterChain.doFilter(servletRequest, servletResponse);
	}

	public void destroy() {
		filterConfig = null;
		encoding = null;
	}

	public void init(FilterConfig filterConfig) throws ServletException {
		this.filterConfig = filterConfig;
		this.encoding = filterConfig.getInitParameter("encoding");

	}
}

2. 브 라 우 저가 페이지 를 캐 시 하지 않도록 하 는 필터 
package com.zhaokuo.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.HttpServletResponse;

/**
 * @author    2012-6-11 
 *      Browser          
 */
public class ForceNoCacheFilter implements Filter {
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain filterChain) throws IOException, ServletException {
		((HttpServletResponse) response).setHeader("Cache-Control", "no-cache");
		((HttpServletResponse) response).setHeader("Pragma", "no-cache");
		((HttpServletResponse) response).setDateHeader("Expires", -1);
		filterChain.doFilter(request, response);
	}

	public void destroy() {
	}

	public void init(FilterConfig filterConfig) throws ServletException {
	}
}

3. 사용자 로그 인 여 부 를 확인 하 는 필터 
package com.test.filter;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

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;
import javax.servlet.http.HttpSession;

/**
 * @author    2012-6-11
 *                ,     ,           
 *     
 * checkSessionKey       Session        
 * redirectURL        ,          ,URL    ContextPath
 * notCheckURLList      URL  ,     ,   URL      ContextPath
 */
public class CheckLoginFilter implements Filter {
	protected FilterConfig filterConfig = null;
	private String redirectURL = null;
	private List notCheckURLList = new ArrayList();
	private String sessionKey = null;

	public void doFilter(ServletRequest servletRequest,
			ServletResponse servletResponse, FilterChain filterChain)
			throws IOException, ServletException {
		HttpServletRequest request = (HttpServletRequest) servletRequest;
		HttpServletResponse response = (HttpServletResponse) servletResponse;

		HttpSession session = request.getSession();
		if (sessionKey == null) {
			filterChain.doFilter(request, response);
			return;
		}
		if ((!checkRequestURIIntNotFilterList(request))
				&& session.getAttribute(sessionKey) == null) {
			response.sendRedirect(request.getContextPath() + redirectURL);
			return;
		}
		filterChain.doFilter(servletRequest, servletResponse);
	}

	public void destroy() {
		notCheckURLList.clear();
	}

	private boolean checkRequestURIIntNotFilterList(HttpServletRequest request) {
		String uri = request.getServletPath()
				+ (request.getPathInfo() == null ? "" : request.getPathInfo());
		return notCheckURLList.contains(uri);
	}

	public void init(FilterConfig filterConfig) throws ServletException {
		this.filterConfig = filterConfig;
		redirectURL = filterConfig.getInitParameter("redirectURL");
		sessionKey = filterConfig.getInitParameter("checkSessionKey");

		String notCheckURLListStr = filterConfig
				.getInitParameter("notCheckURLList");

		if (notCheckURLListStr != null) {
			StringTokenizer st = new StringTokenizer(notCheckURLListStr, ";");
			notCheckURLList.clear();
			while (st.hasMoreTokens()) {
				notCheckURLList.add(st.nextToken());
			}
		}
	}
}

4. 자원 보호 필터 
package com.test.filter;

import java.io.IOException;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

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 org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * @author    2012-6-11
 *
 */
public class SecurityFilter implements Filter {
	//the login page uri 
	private static final String LOGIN_PAGE_URI = "login.jsf";

	//the logger object 
	private Log logger = LogFactory.getLog(this.getClass());

	//a set of restricted resources 
	private Set restrictedResources;

	/** *//** 
	* Initializes the Filter. 
	*/ 
	public void init(FilterConfig filterConfig) throws ServletException { 
	this.restrictedResources = new HashSet(); 
	this.restrictedResources.add("/createProduct.jsf"); 
	this.restrictedResources.add("/editProduct.jsf"); 
	this.restrictedResources.add("/productList.jsf"); 
	}

	/** *//** 
	* Standard doFilter object. 
	*/ 
	public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) 
	throws IOException, ServletException { 
	this.logger.debug("doFilter");

	String contextPath = ((HttpServletRequest)req).getContextPath(); 
	String requestUri = ((HttpServletRequest)req).getRequestURI();

	this.logger.debug("contextPath = " + contextPath); 
	this.logger.debug("requestUri = " + requestUri);

	if (this.contains(requestUri, contextPath) && !this.authorize((HttpServletRequest)req)) { 
	this.logger.debug("authorization failed"); 
	((HttpServletRequest)req).getRequestDispatcher(LOGIN_PAGE_URI).forward(req, res); 
	} 
	else { 
	this.logger.debug("authorization succeeded"); 
	chain.doFilter(req, res); 
	} 
	}

	public void destroy() {}

	private boolean contains(String value, String contextPath) { 
	Iterator ite = this.restrictedResources.iterator();

	while (ite.hasNext()) { 
	String restrictedResource = (String)ite.next();

	if ((contextPath + restrictedResource).equalsIgnoreCase(value)) { 
	return true; 
	} 
	}

	return false; 
	}

	private boolean authorize(HttpServletRequest req) {

	//       
	/**//* UserBean user = (UserBean)req.getSession().getAttribute(BeanNames.USER_BEAN);

	if (user != null && user.getLoggedIn()) { 
	//user logged in 
	return true; 
	} 
	else { 
	return false; 
	}*/ 
	} 
}

5. Filter 를 이용 하여 사용자 의 탐색 권한 을 제한 합 니 다.
한 시스템 에서 일반적으로 여러 권한 을 가 진 사용자.서로 다른 권한 을 가 진 사용자 가 다른 페이지 를 탐색 할 수 있 습 니 다.Filter 를 사용 하여 판단 하면 코드 의 양 을 절약 할 수 있 을 뿐만 아니 라 변경 하려 면 Filter 파일 에서 만 움 직 이면 됩 니 다. 
다음은 Filter 파일 코드 입 니 다.
package com.test.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;

/**
 * @author    2012-6-11
 * 
 */
public class RightFilter implements Filter {

	public void destroy() {

	}

	public void doFilter(ServletRequest sreq, ServletResponse sres,
			FilterChain arg2) throws IOException, ServletException {
		//   uri  
		HttpServletRequest request = (HttpServletRequest) sreq;
		String uri = request.getRequestURI();
		String ctx = request.getContextPath();
		uri = uri.substring(ctx.length());
		//   admin         
		if (uri.startsWith("/admin")) {
			if (request.getSession().getAttribute("admin") == null) {
				request.setAttribute("message", "       ");
				request.getRequestDispatcher("/login.jsp").forward(sreq, sres);
				return;
			}
		}
		//   manage         
		if (uri.startsWith("/manage")) {
			//     
		}
	}

	//               ,  。

	public void init(FilterConfig arg0) throws ServletException {

	}
}

 
 
RightFilter 
cn.itkui.filter.RightFilter 
 
 
RightFilter 
/admin/**//* 
 
 
RightFilter 
/manage/* 

웹. xml 에 Filter 설정 을 추가 합 니 다. 다음 과 같 습 니 다. 

EncodingAndCacheflush 
EncodingAndCacheflush 
 
encoding 
UTF-8 
 
 
 
EncodingAndCacheflush 
/* 

파 라 메 터 를 전달 하려 면 form 을 사용 하여 파 라 메 터 를 전달 하 는 것 이 좋 습 니 다. 링크 를 사용 하면 중국어 문 자 를 사용 할 때 필터 가 바 뀌 지 않 습 니 다. 그리고 페이지 에 있 습 니 다.
form 의 method 도 post 로 설정 해 야 합 니 다. 그렇지 않 으 면 필터 도 작 동 하지 않 습 니 다.

좋은 웹페이지 즐겨찾기