`
dreaminjava
  • 浏览: 35076 次
  • 性别: Icon_minigender_1
  • 来自: 武汉→北京→武汉
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

五个有用的过滤器

阅读更多
五个有用的过滤器

一、使浏览器不缓存页面的过滤器   
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;   
  
/**
* 用于检测用户是否登陆的过滤器,如果未登录,则重定向到指的登录页面


* 配置参数


* 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());   
     }   
    }   
}   
}   
  
三、字符编码的过滤器   
  
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;
   }*/  
}   
}  
五 利用Filter限制用户浏览权限

在一个系统中通常有多个权限的用户。不同权限用户的可以浏览不同的页面。使用Filter进行判断不仅省下了代码量,而且如果要更改的话只需要在Filter文件里动下就可以。
以下是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;   
  
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 {   
           
     }   
  
}

<!-- 判断页面的访问权限 -->  
  <filter>  
     <filter-name>RightFilter</filter-name>  
      <filter-class>cn.itkui.filter.RightFilter</filter-class>  
  </filter>  
  <filter-mapping>  
      <filter-name>RightFilter</filter-name>  
      <url-pattern>/admin/*</url-pattern>  
  </filter-mapping>  
  <filter-mapping>  
      <filter-name>RightFilter</filter-name>  
      <url-pattern>/manage/*</url-pattern>  
  </filter-mapping>  

在web.xml中加入Filter的配置,如下:
<filter>  

        <filter-name>EncodingAndCacheflush</filter-name>  
        <filter-class>EncodingAndCacheflush</filter-class>  
        <init-param>  
            <param-name>encoding</param-name>  
            <param-value>UTF-8</param-value>  
        </init-param>  
    </filter>  
    <filter-mapping>  
        <filter-name>EncodingAndCacheflush</filter-name>  
        <url-pattern>/*</url-pattern>  
    </filter-mapping>  
要传递参数的时候最好使用form进行传参,如果使用链接的话当中文字符的时候过滤器转码是不会起作用的,还有就是页面上

form的method也要设置为post,不然过滤器也起不了作用。

分享到:
评论
5 楼 yzh54ak 2009-02-11  
好东东,谢谢楼主。
4 楼 wj131 2008-11-10  
谢谢楼主啊
3 楼 zhangzuohai 2008-11-04  
楼主写了呀,很好,谢谢
2 楼 yangqingran 2008-09-19  
既然第五种Filter的web.xml配置都写出来了,为什么不顺便把其他四个的写出来呢?
1 楼 364902709 2008-08-08  
不错,我可不可以加在我的博客里?

相关推荐

    五个有用的过滤器.doc

    java 过滤器 五个有用的过滤器.doc

    logstash_filter_f5:适用于F5 APD,DCC,SSHD和TMM系统日志的Logstash过滤器

    将F5日志发送到Elastic Stack,并应用过滤器以启用高级分析。 地位 在生产中。 如何 请检查以获取有关如何使用此插件的更多信息。 帮助 如果您发现错误或有功能请求,请在GitHub上发布问题。 版权 该程序是免费软件...

    Wireshark(网络包分析工具) v3.0.0 RC2.zip

    通常使用显示过滤器过滤后的数据,都是有用的数据包.如果想更加突出的显示某个会话,可以使用着色规则高亮显示. (6)构建图表.如果用户想要更明显的看出一个网络中数据的变化情况,使用图表的形式可以很方便的展现数据...

    WP-HTML5-Category-Selector:一个WordPress插件,使过滤类别更加容易

    #WP HTML5类别选择器WP HTML5类别选择器插件将过滤器输入字段添加到添加/编辑帖子页面上的类别框中。 对于具有许多类别的博客作者很有用。 如果您有任何疑问或反馈,我是上的 。 您可以通过进行贡献。 如果您想捐款...

    网络封包分析工具 Wireshark 3.4.5 + x64.zip

    通常使用显示过滤器过滤后的数据,都是有用的数据包。如果想更加突出的显示某个会话,可以使用着色规则高亮显示。 6.构建图表 如果用户想要更明显的看出一个网络中数据的变化情况,使用图表的形式可以很方便的...

    Commview5完全破解汉化版真正可用-自用的分享给大家

    对于网管人员来说,可以利用“CommView”来观察网络连线、重要的IP资料统计分析,如TCP、UDP、及ICMP,并可...过滤器可以聪明地过滤你不需要的封包或者只对你感兴趣的封包进行截取﹐透过这样准则配置就可随意地进行存取

    恶意url.txt

    纯文本URL列表(仅限URL) ...您可以将它们与安全性过滤器的某些日志文件进行匹配,例如Web代理日志。您也可以将其用作具有低误报率的阻止列表。 纯文本URL列表每5分钟生成一次。请不要每隔5分钟取一次。

    java语言使用geotools工具解决相关问题.rar

    使用 OGC 过滤器编码规范的属性和空间过滤器 2.干净的数据访问 API,支持功能访问,事务支持和线程之间的锁定 以多种文件格式和空间数据库访问 GIS 数据 坐标参考系统和转换支持 处理广泛的地图投影 根据空间和非...

    精通CSS(css mastery)中文版 part5

    part4 精通CSS(css mastery)中文版 part5 精通CSS(css mastery)中文版 part6 这些文件名搜索一下,然后下载,解压缩会自动解成一个文件 &lt;br&gt;本书将最有用的CSS技术汇总在一起,在介绍基本的CSS概念和...

    CommView.v6.5.764.Cracked 破解版

    CommView对于局域网络管理员﹑安全专家﹑网络程序员或者其它需要一个全面的PC或局域网络交流图的人士来说...过滤器可以聪明地过滤你不需要的封包或者只对你感兴趣的封包进行截取﹐透过这样准则配置就可随意地进行存取。

    Python内置函数之filter map reduce介绍

    1. filter函数的功能相当于过滤器。调用一个布尔函数bool_func来迭代遍历每个seq中的元素;返回一个使bool_seq返回值为true的元素的序列。 &gt;&gt;&gt; N=range(10) &gt;&gt;&gt; print filter(lambda x:x&gt;5,N) [6, 7, 8, 9] 2. map...

    FileZilla.3.44.2.x64

    FileZilla 客户端是一个快速可靠的、跨...文件名过滤器 文件夹比较功能 网络设置向导 远程文件编辑功能 保持链接功能 支持HTTP/1.1, SOCKS5 和 FTP代理(FTP-Proxy) 登录到文件功能 同步文件夹浏览 远程查找文件

    Trello列表筛选器「Trello List Filter」-crx插件

    该过滤器无法使用已更改标题的列表•更改了过滤器查询输入字体颜色以匹配trello列表字体颜色0.1.0•添加了前七个搜索的自动完成功能•重点突出显示搜索表达式以轻松更改表达式•一些更新使5岁的js代码现代化。...

    EasyAdminExtensionBundle:向EasyAdminBundle for Symfony提供一些附加功能

    列表过滤器的扩展束实现与EasyAdmin动态列表过滤器不兼容! 这就是我们引入以下更改的原因: :exclamation_mark: 此扩展捆绑包实现的BC BREAK列表过滤器现在使用ext_filters查询/表单参数,因为本机EasyAdmi

    FileZilla--支持FTP、FTPS、SFTP等文件传输

    FileZilla 客户端是一个快速可靠的、跨平台的...文件名过滤器 文件夹比较功能 网络设置向导 远程文件编辑功能 保持链接功能 支持HTTP/1.1, SOCKS5 和 FTP代理(FTP-Proxy) 登录到文件功能 同步文件夹浏览 远程查找文件

    精通CSS(css mastery)中文版 part6

    part3 精通CSS(css mastery)中文版 part4 精通CSS(css mastery)中文版 part5 精通CSS(css mastery)中文版 part6 这些文件名搜索一下,然后下载,解压缩会自动解成一个文件 &lt;br&gt;本书将最有用的CSS...

    精通CSS(css mastery)中文版 part2

    part4 精通CSS(css mastery)中文版 part5 精通CSS(css mastery)中文版 part6 这些文件名搜索一下,然后下载,解压缩会自动解成一个文件 &lt;br&gt;本书将最有用的CSS技术汇总在一起,在介绍基本的CSS概念和...

    精通CSS(css mastery)中文版 part4

    part4 精通CSS(css mastery)中文版 part5 精通CSS(css mastery)中文版 part6 这些文件名搜索一下,然后下载,解压缩会自动解成一个文件 &lt;br&gt;本书将最有用的CSS技术汇总在一起,在介绍基本的CSS概念和...

    精通CSS(css mastery)中文版 part1

    之后本书用两章讨论招数、过滤器、bug和bug修复,最后由Simon Collison和Cameron Moll两位杰出的CSS设计人员,将书中讨论的许多技术组合起来,给出了两个实例研究。本书还集中介绍了现实的浏览器问题,是弥补CSS知识...

    精通CSS(css mastery)中文版 part3

    part4 精通CSS(css mastery)中文版 part5 精通CSS(css mastery)中文版 part6 这些文件名搜索一下,然后下载,解压缩会自动解成一个文件 &lt;br&gt;本书将最有用的CSS技术汇总在一起,在介绍基本的CSS概念和...

Global site tag (gtag.js) - Google Analytics