`
一个人过
  • 浏览: 1799 次
  • 性别: Icon_minigender_1
  • 来自: 陕西
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

几个有用的过滤器

阅读更多
四个有用的过滤器 Filter
关键字: servlet
java 代码
1.一、使浏览器不缓存页面的过滤器    
2.import javax.servlet.*;   
3.import javax.servlet.http.HttpServletResponse;   
4.import java.io.IOException;   
5.  
6./**  
7.* 用于的使 Browser 不缓存页面的过滤器  
8.*/  
9.public class ForceNoCacheFilter implements Filter {   
10.  
11.public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException   
12.{   
13.   ((HttpServletResponse) response).setHeader("Cache-Control","no-cache");   
14.   ((HttpServletResponse) response).setHeader("Pragma","no-cache");   
15.   ((HttpServletResponse) response).setDateHeader ("Expires", -1);   
16.   filterChain.doFilter(request, response);   
17.}   
18.  
19.public void destroy()   
20.{   
21.}   
22.  
23.     public void init(FilterConfig filterConfig) throws ServletException   
24.{   
25.}   
26.}   
27.  
28.二、检测用户是否登陆的过滤器   
29.  
30.import javax.servlet.*;   
31.import javax.servlet.http.HttpServletRequest;   
32.import javax.servlet.http.HttpServletResponse;   
33.import javax.servlet.http.HttpSession;   
34.import java.util.List;   
35.import java.util.ArrayList;   
36.import java.util.StringTokenizer;   
37.import java.io.IOException;   
38.  
39./**  
40.* 用于检测用户是否登陆的过滤器,如果未登录,则重定向到指的登录页面   
41.1.1.* 配置参数   
2.1.1.* checkSessionKey 需检查的在 Session 中保存的关键字  
2.1.* redirectURL 如果用户未登录,则重定向到指定的页面,URL不包括 ContextPath  
2.1.* notCheckURLList 不做检查的URL列表,以分号分开,并且 URL 中不包括 ContextPath  
2.1.*/  
2.public class CheckLoginFilter   
3.implements Filter   
4.{   
5.     protected FilterConfig filterConfig = null;   
6.     private String redirectURL = null;   
7.     private List notCheckURLList = new ArrayList();   
8.     private String sessionKey = null;   
9.  
10.public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException   
11.{   
12.   HttpServletRequest request = (HttpServletRequest) servletRequest;   
13.   HttpServletResponse response = (HttpServletResponse) servletResponse;   
14.  
15.    HttpSession session = request.getSession();   
16.   if(sessionKey == null)   
17.   {   
18.    filterChain.doFilter(request, response);   
19.    return;   
20.   }   
21.   if((!checkRequestURIIntNotFilterList(request)) && session.getAttribute(sessionKey) == null)   
22.   {   
23.    response.sendRedirect(request.getContextPath() + redirectURL);   
24.    return;   
25.   }   
26.   filterChain.doFilter(servletRequest, servletResponse);   
27.}   
28.  
29.public void destroy()   
30.{   
31.   notCheckURLList.clear();   
32.}   
33.  
34.private boolean checkRequestURIIntNotFilterList(HttpServletRequest request)   
35.{   
36.   String uri = request.getServletPath() + (request.getPathInfo() == null ? "" : request.getPathInfo());   
37.   return notCheckURLList.contains(uri);   
38.}   
39.  
40.public void init(FilterConfig filterConfig) throws ServletException   
41.{   
42.   this.filterConfig = filterConfig;   
43.   redirectURL = filterConfig.getInitParameter("redirectURL");   
44.   sessionKey = filterConfig.getInitParameter("checkSessionKey");   
45.  
46.   String notCheckURLListStr = filterConfig.getInitParameter("notCheckURLList");   
47.  
48.   if(notCheckURLListStr != null)   
49.   {   
50.    StringTokenizer st = new StringTokenizer(notCheckURLListStr, ";");   
51.    notCheckURLList.clear();   
52.    while(st.hasMoreTokens())   
53.    {   
54.     notCheckURLList.add(st.nextToken());   
55.    }   
56.   }   
57.}   
58.}   
59.  
60.三、字符编码的过滤器   
61.  
62.import javax.servlet.*;   
63.import java.io.IOException;   
64.  
65./**  
66.* 用于设置 HTTP 请求字符编码的过滤器,通过过滤器参数encoding指明使用何种字符编码,用于处理Html Form请求参数的中文问题  
67.*/  
68.public class CharacterEncodingFilter   
69.implements Filter   
70.{   
71.protected FilterConfig filterConfig = null;   
72.protected String encoding = "";   
73.  
74.public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException   
75.{   
76.         if(encoding != null)   
77.          servletRequest.setCharacterEncoding(encoding);   
78.         filterChain.doFilter(servletRequest, servletResponse);   
79.}   
80.  
81.public void destroy()   
82.{   
83.   filterConfig = null;   
84.   encoding = null;   
85.}   
86.  
87.     public void init(FilterConfig filterConfig) throws ServletException   
88.{   
89.          this.filterConfig = filterConfig;   
90.         this.encoding = filterConfig.getInitParameter("encoding");   
91.  
92.}   
93.}   
94.  
95.四、资源保护过滤器   
96.  
97.  
98.package catalog.view.util;   
99.  
100.import javax.servlet.Filter;   
101.import javax.servlet.FilterConfig;   
102.import javax.servlet.ServletRequest;   
103.import javax.servlet.ServletResponse;   
104.import javax.servlet.FilterChain;   
105.import javax.servlet.ServletException;   
106.import javax.servlet.http.HttpServletRequest;   
107.import java.io.IOException;   
108.import java.util.Iterator;   
109.import java.util.Set;   
110.import java.util.HashSet;   
111.//   
112.import org.apache.commons.logging.Log;   
113.import org.apache.commons.logging.LogFactory;   
114.  
115./**  
116. * This Filter class handle the security of the application.  
117. *   
118. * It should be configured inside the web.xml.  
119. *   
120. * @author Derek Y. Shen  
121. */  
122.public class SecurityFilter implements Filter {   
123. //the login page uri   
124. private static final String LOGIN_PAGE_URI = "login.jsf";   
125.    
126. //the logger object   
127. private Log logger = LogFactory.getLog(this.getClass());   
128.    
129. //a set of restricted resources   
130. private Set restrictedResources;   
131.    
132. /**  
133.  * Initializes the Filter.  
134.  */  
135. public void init(FilterConfig filterConfig) throws ServletException {   
136.  this.restrictedResources = new HashSet();   
137.  this.restrictedResources.add("/createProduct.jsf");   
138.  this.restrictedResources.add("/editProduct.jsf");   
139.  this.restrictedResources.add("/productList.jsf");   
140. }   
141.    
142. /**  
143.  * Standard doFilter object.  
144.  */  
145. public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)   
146.   throws IOException, ServletException {   
147.  this.logger.debug("doFilter");   
148.     
149.  String contextPath = ((HttpServletRequest)req).getContextPath();   
150.  String requestUri = ((HttpServletRequest)req).getRequestURI();   
151.     
152.  this.logger.debug("contextPath = " + contextPath);   
153.  this.logger.debug("requestUri = " + requestUri);   
154.     
155.  if (this.contains(requestUri, contextPath) && !this.authorize((HttpServletRequest)req)) {   
156.   this.logger.debug("authorization failed");   
157.   ((HttpServletRequest)req).getRequestDispatcher(LOGIN_PAGE_URI).forward(req, res);   
158.  }   
159.  else {   
160.   this.logger.debug("authorization succeeded");   
161.   chain.doFilter(req, res);   
162.  }   
163. }   
164.    
165. public void destroy() {}    
166.    
167. private boolean contains(String value, String contextPath) {   
168.  Iterator ite = this.restrictedResources.iterator();   
169.     
170.  while (ite.hasNext()) {   
171.   String restrictedResource = (String)ite.next();   
172.      
173.   if ((contextPath + restrictedResource).equalsIgnoreCase(value)) {   
174.    return true;   
175.   }   
176.  }   
177.     
178.  return false;   
179. }   
180.    
181. private boolean authorize(HttpServletRequest req) {   
182.  
183.              //处理用户登录   
184.       /* UserBean user = (UserBean)req.getSession().getAttribute(BeanNames.USER_BEAN);  
185.    
186.  if (user != null && user.getLoggedIn()) {  
187.   //user logged in  
188.   return true;  
189.  }  
190.  else {  
191.   return false;  
192.  }*/  
193. }   
194.}


五 利用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,不然过滤器也起不了作用。
分享到:
评论

相关推荐

    几个有用的过滤器 小技巧

    在Java EE开发中,过滤器(Filter)是一个非常重要的组件,它允许我们在数据处理和请求转发之间进行干预,实现如登录验证、字符编码转换、日志记录等多种功能。本资源包含了一些实用的过滤器小技巧,以下是这些过滤...

    wireshark捕获过滤器与显示过滤器

    以下是几种常见的捕获过滤器示例: 1. **显示目的TCP端口为3128的封包**:`tcp dst port 3128` - 这条命令会过滤出所有目的端口为3128的数据包,通常用于代理服务器的监控。 2. **显示来源IP地址为10.1.1.1的封包...

    五个有用的过滤器.doc

    这里我们关注的是五个有用的Java过滤器,它们分别是:使浏览器不缓存页面的过滤器和检测用户是否登录的过滤器。 首先,我们来看第一个过滤器——`ForceNoCacheFilter`。这个过滤器的主要作用是防止浏览器缓存页面...

    java实现的布隆过滤器算法

    在Java中实现布隆过滤器,主要涉及到以下几个关键知识点: 1. **位数组**:布隆过滤器的核心是一个很长的位数组,初始化时所有位都设置为0。位数组的大小是根据预期要存储的元素数量和允许的误判率来确定的。 2. *...

    pipecodefiltter.zip_管道过滤_管道过滤器_管道风格

    5. **KWIC11.java**: 关键词在上下文(Key Word in Context)过滤器,可能用于提取关键词并将其置于上下文之中,如显示关键词前后的几个单词,用于文本分析或搜索。 6. **CircularShifter11.java**: 该过滤器可能...

    Hadoop学习四十二:HBase 过滤器

    每个过滤器都有几个重要的方法: - `return true` from `filterRowKey`:如果过滤器确定整个行都不需要,则可以立即跳过。 - `filterAllRemaining`:一旦调用此方法,扫描器将不再处理后续的列。 - `filterKeyValue...

    Django内置过滤器帮助文档.pdf

    另一个内置过滤器`with`可以将复杂的变量缓存到一个简单的名称下,这对于多次访问“昂贵”的方法(比如那些访问数据库的方法)非常有用。例如: ```django {% with total=business.employees.count %} {{ total }}...

    过滤器存储过程用例

    在设计过滤器存储过程时,我们需要注意以下几点: 1. **参数化**:为了确保存储过程的灵活性和可复用性,应尽可能使用参数来接受外部输入,避免硬编码。 2. **性能优化**:合理使用索引,避免全表扫描;考虑是否...

    QT事件过滤器实现动态图片

    QT事件过滤器是Qt库中一个强大的特性,它允许我们拦截和处理对象接收到的事件。在本场景中,我们将探讨如何使用事件过滤器来实现一个动态图片按钮,即当鼠标按下时,按钮的图片会变化,并且能够响应鼠标按下事件。 ...

    布隆过滤器

    在C++实现的布隆过滤器中,主要包含以下几个核心部分: 1. **位数组(Bit Array)**:布隆过滤器的基础是一个很长的二进制向量,初始化为全零。这个位数组的大小决定了可以存储的元素数量以及误判率。 2. **哈希...

    TestCenter过滤器的使用

    在TestCenter中,创建过滤器通常包括以下几个步骤: 1. **定义字段**:选择要筛选的报文字段,如源IP、目的IP、端口号、协议类型(TCP、UDP、ICMP等)、DSCP值等。这些字段是构建过滤规则的基础。 2. **选择运算符...

    Java代码:KWIC程序示例

    4. **上下文提取过滤器**:一旦找到关键词,过滤器会提取关键词周围的上下文,通常包括前面和后面的几个单词,形成KWIC格式的输出。 5. **输出过滤器**:最后,程序将处理后的KWIC结果输出到控制台或新的文件中,供...

    Zend Framework过滤器Zend_Filter用法详解

    Zend Framework的过滤器组件还提供了一些其他有用的过滤器,比如Zend_Filter_Alpha用于保留字母字符,Zend_FilterDigits用于保留数字字符,以及可以自定义的Zend_Filter_Clean用于清洗和验证数据。 总之,Zend ...

    reids布隆过滤器压缩包

    Redis布隆过滤器是一种在Redis数据库中实现的高效空间节省的数据结构,用于判断一个元素是否可能存在于集合中。它在处理大数据量时尤其有用,因为它的主要特点是占用内存小且查询速度快,但可能会有误判的情况。这个...

    Filter4个有用的过滤器

    很详细的代码,非常有用,都是开发中常用的几种拦截器!

    jsp filter 过滤器功能与简单用法示例.docx

    要实现一个过滤器,需要完成以下几个步骤: ##### 3.1 实现Filter接口 首先,需要创建一个类实现`java.servlet.Filter`接口,该接口包含以下三个方法: - `init(FilterConfig config)`:初始化过滤器时调用。 - `...

    WebApiExceptionPipeline:向 WebApi 管道添加一个 ExceptionFilters 管道和几个有用的过滤器

    WepApi 异常管道添加ExceptionFilterAttribute... 总共三个新过滤器: PipelineExceptionFilterAttribute ExceptionTranslatorFilterAttribute和ExceptionLoggerFilterAttribute例子要使用管道,只需将其添加到HttpConf

    bloom过滤器解决缓存击穿问题1

    布隆过滤器是一种空间效率极高的概率型数据结构,用于判断一个元素是否可能在一个集合中。它通过使用多个哈希函数将元素映射到一个固定大小的位数组上,允许存在一定比例的误判。这种数据结构在处理大量数据时非常...

    java过滤器中修改一个http请求的返回内容.docx

    在这个子类中,我们需要重写几个关键方法来控制响应的输出流。 - **getOutputStream()**:重写此方法以返回一个自定义的`ServletOutputStream`,如`WapperedOutputStream`,该流将数据写入内存中的缓冲区,而不是...

    Zabbix如何使用过滤器实现监控

    监控过滤器是Zabbix中一个非常有用的功能,它能够帮助用户精确地选择和排除特定的监控项,从而优化监控信息的质量,提高监控系统的效率和准确性。 首先,过滤器在Zabbix中的作用主要体现在两个方面:一是过滤掉那些...

Global site tag (gtag.js) - Google Analytics