參考:http://www.blogjava.net/fantasy/archive/2006/03/21/36593.html
一、使瀏覽器不緩存頁面的過濾器
import javax.servlet.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
*
用於的使 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
{
}
}
二、檢測用戶是否登陸的過濾器
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.List;
import java.util.ArrayList;
import java.util.StringTokenizer;
import java.io.IOException;
/**
*
用於檢測用戶是否登陸的過濾器,如果未登錄,則重定向到指的登錄頁面<p>
*
配置參數<p>
* checkSessionKey
需檢查的在 Session
中保存的關鍵字<br/>
* redirectURL
如果用戶未登錄,則重定向到指定的頁面,URL
不包括 ContextPath<br/>
* notCheckURLList
不做檢查的URL
列表,以分號分開,並且 URL
中不包括 ContextPath<br/>
*/
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());
}
}
}
}
<!-- /* Font Definitions */ @font-face {font-family:宋體; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 680460288 22 0 262145 0;} @font-face {font-family:"Cambria Math"; panose-1:2 4 5 3 5 4 6 3 2 4; mso-font-charset:1; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:0 0 0 0 0 0;} @font-face {font-family:Calibri; panose-1:2 15 5 2 2 2 4 3 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:-520092929 1073786111 9 0 415 0;} @font-face {font-family:"/@宋體"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 680460288 22 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-unhide:no; mso-style-qformat:yes; mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:11.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:宋體; mso-fareast-theme-font:minor-fareast; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:minor-bidi; mso-font-kerning:1.0pt;} .MsoChpDefault {mso-style-type:export-only; mso-default-props:yes; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:minor-bidi;} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:612.0pt 792.0pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.Section1 {page:Section1;} -->
三、字符編碼的過濾器
import javax.servlet.*;
import java.io.IOException;
/**
*
用於設置 HTTP
請求字符編碼的過濾器,通過過濾器參數encoding
指明使用何種字符編碼,
用於處理Html Form
請求參數的中文問題
*/
public class CharacterEncodingFilter
implements Filter
{
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");
}
}
四、資源保護過濾器
package catalog.view.util;
import javax.servlet.Filter;
import javax.servlet.FilterConfig;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.Iterator;
import java.util.Set;
import java.util.HashSet;
//
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* This Filter class handle the security
of the application.
*
* It should be configured inside the
web.xml.
*
* @author
Derek Y. Shen
*/
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;
}*/
}
}