知道美河 | 上传资料 | VIP申请 | 精品课程 | 资料搜索 | 问题反馈 | 会员手册 | 积分消费 | 积分充值 | 帐号保护
美河学习学习在线赞助VIP

美河学习在线(主站) eimhe.com

 找回密码
 建立账号
查看: 8677|回复: 2

[分享] 四个有用的过虑器

[复制链接]
发表于 2007-8-13 10:57:27 | 显示全部楼层 |阅读模式
一、使浏览器不缓存页面的过滤器
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());
   }
  }
}
}
三、字符编码的过滤器
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("crequestUri = " + 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;
  }*/
}
}
发表于 2007-8-13 11:27:49 | 显示全部楼层
发表于 2009-4-6 12:35:45 | 显示全部楼层
您需要登录后才可以回帖 登录 | 建立账号

本版积分规则

 
QQ在线咨询

QQ|小黑屋|手机版|Archiver|美河学习在线 ( 浙网备33020302000026号 )

GMT+8, 2025-5-2 10:30

Powered by Discuz!

© 2001-2025 eimhe.com.

快速回复 返回顶部 返回列表