`
zhengxuezhou
  • 浏览: 151296 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

常用filter

    博客分类:
  • web
阅读更多
出自:http://xxtianxiaxing.iteye.com/blog/350161

在于自己收集好的东西,谢谢作者。

Java代码

   1. 五个有用的过滤器  
   2.  
   3. 一、使浏览器不缓存页面的过滤器     
   4. import javax.servlet.*;     
   5. import javax.servlet.http.HttpServletResponse;     
   6. import java.io.IOException;     
   7.     
   8. /** 
   9. * 用于的使 Browser 不缓存页面的过滤器 
  10. */    
  11. public class ForceNoCacheFilter implements Filter {     
  12.     
  13. public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException     
  14. {     
  15.     ((HttpServletResponse) response).setHeader("Cache-Control","no-cache");     
  16.     ((HttpServletResponse) response).setHeader("Pragma","no-cache");     
  17.     ((HttpServletResponse) response).setDateHeader ("Expires", -1);     
  18.     filterChain.doFilter(request, response);     
  19. }     
  20.     
  21. public void destroy()     
  22. {     
  23. }     
  24.     
  25.      public void init(FilterConfig filterConfig) throws ServletException     
  26. {     
  27. }     
  28. }     
  29.     
  30. 二、检测用户是否登陆的过滤器     
  31.     
  32. import javax.servlet.*;     
  33. import javax.servlet.http.HttpServletRequest;     
  34. import javax.servlet.http.HttpServletResponse;     
  35. import javax.servlet.http.HttpSession;     
  36. import java.util.List;     
  37. import java.util.ArrayList;     
  38. import java.util.StringTokenizer;     
  39. import java.io.IOException;     
  40.     
  41. /** 
  42. * 用于检测用户是否登陆的过滤器,如果未登录,则重定向到指的登录页面 
  43. 
  44. 
  45. * 配置参数 
  46. 
  47. 
  48. * checkSessionKey 需检查的在 Session 中保存的关键字 
  49. 
  50. * redirectURL 如果用户未登录,则重定向到指定的页面,URL不包括 ContextPath 
  51. 
  52. * notCheckURLList 不做检查的URL列表,以分号分开,并且 URL 中不包括 ContextPath 
  53. 
  54. */    
  55. public class CheckLoginFilter     
  56. implements Filter     
  57. {     
  58.      protected FilterConfig filterConfig = null;     
  59.      private String redirectURL = null;     
  60.      private List notCheckURLList = new ArrayList();     
  61.      private String sessionKey = null;     
  62.     
  63. public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException     
  64. {     
  65.     HttpServletRequest request = (HttpServletRequest) servletRequest;     
  66.     HttpServletResponse response = (HttpServletResponse) servletResponse;     
  67.     
  68.      HttpSession session = request.getSession();     
  69.    if(sessionKey == null)     
  70.     {     
  71.      filterChain.doFilter(request, response);     
  72.     return;     
  73.     }     
  74.    if((!checkRequestURIIntNotFilterList(request)) && session.getAttribute(sessionKey) == null)     
  75.     {     
  76.      response.sendRedirect(request.getContextPath() + redirectURL);     
  77.     return;     
  78.     }     
  79.     filterChain.doFilter(servletRequest, servletResponse);     
  80. }     
  81.     
  82. public void destroy()     
  83. {     
  84.     notCheckURLList.clear();     
  85. }     
  86.     
  87. private boolean checkRequestURIIntNotFilterList(HttpServletRequest request)     
  88. {     
  89.     String uri = request.getServletPath() + (request.getPathInfo() == null ? "" : request.getPathInfo());     
  90.    return notCheckURLList.contains(uri);     
  91. }     
  92.     
  93. public void init(FilterConfig filterConfig) throws ServletException     
  94. {     
  95.    this.filterConfig = filterConfig;     
  96.     redirectURL = filterConfig.getInitParameter("redirectURL");     
  97.     sessionKey = filterConfig.getInitParameter("checkSessionKey");     
  98.     
  99.     String notCheckURLListStr = filterConfig.getInitParameter("notCheckURLList");     
100.     
101.    if(notCheckURLListStr != null)     
102.     {     
103.      StringTokenizer st = new StringTokenizer(notCheckURLListStr, ";");     
104.      notCheckURLList.clear();     
105.     while(st.hasMoreTokens())     
106.      {     
107.       notCheckURLList.add(st.nextToken());     
108.      }     
109.     }     
110. }     
111. }     
112.     
113. 三、字符编码的过滤器     
114.     
115. import javax.servlet.*;     
116. import java.io.IOException;     
117.     
118. /** 
119. * 用于设置 HTTP 请求字符编码的过滤器,通过过滤器参数encoding指明使用何种字符编码,用于处理Html Form请求参数的中文问题 
120. */    
121. public class CharacterEncodingFilter     
122. implements Filter     
123. {     
124. protected FilterConfig filterConfig = null;     
125. protected String encoding = "";     
126.     
127. public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException     
128. {     
129.          if(encoding != null)     
130.            servletRequest.setCharacterEncoding(encoding);     
131.           filterChain.doFilter(servletRequest, servletResponse);     
132. }     
133.     
134. public void destroy()     
135. {     
136.     filterConfig = null;     
137.     encoding = null;     
138. }     
139.     
140.      public void init(FilterConfig filterConfig) throws ServletException     
141. {     
142.           this.filterConfig = filterConfig;     
143.          this.encoding = filterConfig.getInitParameter("encoding");     
144.     
145. }     
146. }     
147.     
148. 四、资源保护过滤器     
149.     
150.     
151. package catalog.view.util;     
152.     
153. import javax.servlet.Filter;     
154. import javax.servlet.FilterConfig;     
155. import javax.servlet.ServletRequest;     
156. import javax.servlet.ServletResponse;     
157. import javax.servlet.FilterChain;     
158. import javax.servlet.ServletException;     
159. import javax.servlet.http.HttpServletRequest;     
160. import java.io.IOException;     
161. import java.util.Iterator;     
162. import java.util.Set;     
163. import java.util.HashSet;     
164. //     
165. import org.apache.commons.logging.Log;     
166. import org.apache.commons.logging.LogFactory;     
167.     
168. /** 
169. * This Filter class handle the security of the application. 
170. * 
171. * It should be configured inside the web.xml. 
172. * 
173. * @author Derek Y. Shen 
174. */    
175. public class SecurityFilter implements Filter {     
176. //the login page uri     
177. private static final String LOGIN_PAGE_URI = "login.jsf";     
178.     
179. //the logger object     
180. private Log logger = LogFactory.getLog(this.getClass());     
181.     
182. //a set of restricted resources     
183. private Set restrictedResources;     
184.     
185. /** 
186.    * Initializes the Filter. 
187.    */    
188. public void init(FilterConfig filterConfig) throws ServletException {     
189.   this.restrictedResources = new HashSet();     
190.   this.restrictedResources.add("/createProduct.jsf");     
191.   this.restrictedResources.add("/editProduct.jsf");     
192.   this.restrictedResources.add("/productList.jsf");     
193. }     
194.     
195. /** 
196.    * Standard doFilter object. 
197.    */    
198. public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)     
199.    throws IOException, ServletException {     
200.   this.logger.debug("doFilter");     
201.        
202.    String contextPath = ((HttpServletRequest)req).getContextPath();     
203.    String requestUri = ((HttpServletRequest)req).getRequestURI();     
204.        
205.   this.logger.debug("contextPath = " + contextPath);     
206.   this.logger.debug("requestUri = " + requestUri);     
207.        
208.   if (this.contains(requestUri, contextPath) && !this.authorize((HttpServletRequest)req)) {     
209.    this.logger.debug("authorization failed");     
210.     ((HttpServletRequest)req).getRequestDispatcher(LOGIN_PAGE_URI).forward(req, res);     
211.    }     
212.   else {     
213.    this.logger.debug("authorization succeeded");     
214.     chain.doFilter(req, res);     
215.    }     
216. }     
217.     
218. public void destroy() {}     
219.     
220. private boolean contains(String value, String contextPath) {     
221.    Iterator ite = this.restrictedResources.iterator();     
222.        
223.   while (ite.hasNext()) {     
224.     String restrictedResource = (String)ite.next();     
225.         
226.    if ((contextPath + restrictedResource).equalsIgnoreCase(value)) {     
227.     return true;     
228.     }     
229.    }     
230.        
231.   return false;     
232. }     
233.     
234. private boolean authorize(HttpServletRequest req) {     
235.     
236.               //处理用户登录     
237.        /* UserBean user = (UserBean)req.getSession().getAttribute(BeanNames.USER_BEAN); 
238.    
239.    if (user != null && user.getLoggedIn()) { 
240.     //user logged in 
241.     return true; 
242.    } 
243.    else { 
244.     return false; 
245.    }*/    
246. }     
247. }    
248. 五 利用Filter限制用户浏览权限  
249.  
250. 在一个系统中通常有多个权限的用户。不同权限用户的可以浏览不同的页面。使用Filter进行判断不仅省下了代码量,而且如果要更改的话只需要在Filter文件里动下就可以。  
251. 以下是Filter文件代码:  
252.  
253.  
254. import java.io.IOException;     
255.  
256.     
257. import javax.servlet.Filter;     
258. import javax.servlet.FilterChain;     
259. import javax.servlet.FilterConfig;     
260. import javax.servlet.ServletException;     
261. import javax.servlet.ServletRequest;     
262. import javax.servlet.ServletResponse;     
263. import javax.servlet.http.HttpServletRequest;     
264.     
265. public class RightFilter implements Filter {     
266.     
267.     public void destroy() {     
268.              
269.      }     
270.     
271.     public void doFilter(ServletRequest sreq, ServletResponse sres, FilterChain arg2) throws IOException, ServletException {     
272.         // 获取uri地址     
273.          HttpServletRequest request=(HttpServletRequest)sreq;     
274.          String uri = request.getRequestURI();     
275.          String ctx=request.getContextPath();     
276.          uri = uri.substring(ctx.length());     
277.         //判断admin级别网页的浏览权限     
278.         if(uri.startsWith("/admin")) {     
279.             if(request.getSession().getAttribute("admin")==null) {     
280.                  request.setAttribute("message","您没有这个权限");     
281.                  request.getRequestDispatcher("/login.jsp").forward(sreq,sres);     
282.                 return;     
283.              }     
284.          }     
285.         //判断manage级别网页的浏览权限     
286.         if(uri.startsWith("/manage")) {     
287.             //这里省去     
288.              }     
289.          }     
290.         //下面还可以添加其他的用户权限,省去。     
291.     
292.      }     
293.     
294.     public void init(FilterConfig arg0) throws ServletException {     
295.              
296.      }     
297.     
298. }  
299.  
300. <!-- 判断页面的访问权限 -->    
301.   <filter>    
302.      <filter-name>RightFilter</filter-name>    
303.       <filter-class>cn.itkui.filter.RightFilter</filter-class>    
304.   </filter>    
305.   <filter-mapping>    
306.       <filter-name>RightFilter</filter-name>    
307.       <url-pattern>/admin/*</url-pattern>    
308.   </filter-mapping>    
309.   <filter-mapping>    
310.       <filter-name>RightFilter</filter-name>    
311.       <url-pattern>/manage/*</url-pattern>    
312.   </filter-mapping>    
313.  
314. 在web.xml中加入Filter的配置,如下:  
315. <filter>    
316.  
317.         <filter-name>EncodingAndCacheflush</filter-name>    
318.         <filter-class>EncodingAndCacheflush</filter-class>    
319.         <init-param>    
320.             <param-name>encoding</param-name>    
321.             <param-value>UTF-8</param-value>    
322.         </init-param>    
323.     </filter>    
324.     <filter-mapping>    
325.         <filter-name>EncodingAndCacheflush</filter-name>    
326.         <url-pattern>/*</url-pattern>    
327.     </filter-mapping>    
328. 要传递参数的时候最好使用form进行传参,如果使用链接的话当中文字符的时候过滤器转码是不会起作用的,还有就是页面上  
329.  
330. form的method也要设置为post,不然过滤器也起不了作用。  
分享到:
评论

相关推荐

    CSS的filter常用滤波器属性及语句大全

    在给定的文件信息中,详细列出了多种常用的滤波器属性及其参数设置方法,让我们深入探讨这些滤波器的具体功能与应用场景。 ### 1. Alpha(透明度) Alpha滤波器主要用于调整图像的透明度。参数`Opacity`用于设定...

    [confluence插件] tablefilter-9.10.1.jar

    [confluence插件] tablefilter-9.10.1.jar [confluence插件] tablefilter-9.10.1.jar [confluence插件] tablefilter-9.10.1.jar [confluence插件] tablefilter-9.10.1.jar [confluence插件] tablefilter-9.10.1.jar ...

    FilterPro 安装及基本教程中英文

    "Sallen-Key"滤波器是一种常用的模拟滤波器设计结构,以其简单的电路配置和易于分析的特性而著称。FilterPro内置了Sallen-Key滤波器设计模块,允许用户根据所需的频率响应特性来调整元件值。只需输入频率参数,软件...

    Jakes - 基于ES的音乐搜索引擎

    ##### 常用 Filter - **bool filter**:用于逻辑组合过滤条件。 - **term filter**:匹配指定值的字段。 - **range filter**:指定范围内的值。 ##### 插件 - **插件扩展**:根据具体需求选择合适的插件以增强...

    Filter(过滤器)简介和工作原理

    * 缓存处理:可以使用 Filter 来实现缓存处理,例如缓存常用的静态资源。 * 数据压缩:可以使用 Filter 来实现数据压缩,例如压缩 HTML、CSS 和 JavaScript 文件。 Filter 是 Java EE 中的一种强大且灵活的组件,...

    delphi资源-Filter中的模糊过滤

    为了满足不同场景下的数据处理需求,Delphi提供了多种方式来实现数据过滤,其中模糊过滤是较为常用的一种。本文将详细介绍在BDE(Borland Database Engine)和ADO(ActiveX Data Objects)环境下如何实现模糊过滤,...

    Matlab中filter和conv函数的区别

    在Matlab中,`filter` 和 `conv` 是两个常用函数,它们各自有着独特的应用场景。本文将详细介绍这两个函数的功能、用法及其区别,并通过示例代码帮助理解。 #### 二、`filter` 函数详解 ##### 1. 基本概念 `...

    S04-tomcat之Filter内存马1

    在Java Web开发中,Tomcat作为常用的Servlet容器,其内部机制包括了对Filter的管理。Filter内存马是指利用Tomcat的特定功能,在运行时动态注册Filter,以实现非法的系统控制或者恶意行为。本文将深入探讨Filter在...

    servlet_filter.rar_Servlet filter_重写filter

    敏感字符可能包括SQL注入攻击常用的特殊字符,或者是可能导致跨站脚本(XSS)攻击的HTML标签。Filter可以检查并替换或移除这些字符,防止恶意用户利用它们进行攻击。例如,可以通过正则表达式检查请求参数并进行转义...

    css filter滤镜详解

    本文将详细介绍 CSS 滤镜的常用方法和浏览器兼容问题。 一、透明度(Alpha) 透明度是 CSS 滤镜中最基本的效果之一,可以使元素的透明度从 0(完全透明)到 100(完全不透明)。语法为:`filter: Alpha(opacity=n)...

    CSS style filter

    CSS Style Filter提供了一种简单且有效的方式来调整页面元素的视觉表现,无论是模糊效果、阴影还是颜色变换等,都可以通过上述介绍的几种常用滤镜来实现。这对于希望快速提升网站视觉效果的开发者来说,无疑是一个...

    cors-filter-1.7.jar 和 java-property-utils-1.9.jar

    `cors-filter-1.7.jar` 和 `java-property-utils-1.9.jar` 是在Java环境中实现CORS跨域访问时常用的两个库。`cors-filter-1.7.jar` 包含了一个过滤器,该过滤器能够处理HTTP请求头,允许跨域请求通过。而`java-...

    使用PCL实现,基于ray filter的雷达点云地面过滤ROS节点.gz

    Ray Filter算法是一种常用的点云滤波方法,主要用于识别和去除地面点。该算法的基本思想是沿着雷达扫描的光线方向进行分析。在LiDAR扫描的每个方向上,算法会检查沿射线的连续点,如果点的高度变化超过某个阈值,则...

    msdn 全部实例 之filter

    在JavaScript中,Array.prototype.filter()是一个常用的方法,用于创建一个新的数组,新数组包含原数组中满足测试函数条件的所有元素。这在处理大数据集时非常有用,例如在响应式表格或者动态搜索中。 HTML5引入的...

    Filter压缩

    例如,Gzip和Brotli都是常用的HTTP压缩算法,它们利用了类似的技术来压缩网页内容。 Filter压缩的一个重要应用场景是HTTP压缩。当用户请求一个网页时,服务器可以先对HTML、CSS、JavaScript等资源进行压缩,然后...

    FilterPro设计程序和应用手册

    - **MFB拓扑**:MFB拓扑是一种常用的低通滤波器实现方式,特别适合于高阶滤波器的设计。其特点在于结构简单且稳定性好。 - **萨伦-基拓扑**:萨伦-基拓扑通常用于构建高性能滤波器,特别是当需要实现复杂的频率响应...

    filter_pcd.zip

    在3D计算机视觉和机器人领域,点云数据是一种常用的数据形式,它由多个三维坐标点组成,用来描述物体表面的形状。"filtering"通常指的是对点云进行预处理,以去除噪声、减少冗余信息或提取关键特征。 点云过滤...

    几种常用的滤波算法C语言filter.c

    在嵌入式开发中经常会用到一些滤波算法,我整理了一些资料把这些算法封装成可以直接调用的函数,方便以后的开发,包括限幅滤波、中位值滤波法、 算术平均滤波法、一阶滞后滤波法、加权递推平均滤波法、消抖滤波法 ,...

    ,为自定义adapter设计搜索TextFilter

    在Android开发中,Adapter是一个非常重要的组件,它用于在ListView、RecyclerView等视图组件中展示数据。...同时,这也是Android开发中常用的一种优化手段,确保应用在处理大量数据时仍然保持良好的性能。

    使用filter拦截servlet和jsp页面的内容,进行过滤后输出

    在Java Web开发中,Servlet和JSP页面是常用的动态内容生成技术。为了增强应用程序的安全性、性能优化或者实现特定的功能,我们常常会使用过滤器(Filter)来拦截请求和响应。本文将详细介绍如何使用filter来对...

Global site tag (gtag.js) - Google Analytics