`

常用JAVA过滤器用法

阅读更多
java 代码
一、使浏览器不缓存页面的过滤器    

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;     
   }*/      
}       
分享到:
评论

相关推荐

    java中五种常用的过滤器

    本文将详细介绍标题提及的五种常用过滤器,并提供相关实现代码,帮助理解它们的工作原理和用途。 一、使浏览器不缓存页面的过滤器 在Web开发中,有时我们需要确保每次请求都能获取最新的页面内容,防止浏览器缓存...

    java 常用过滤器

    下面将详细讲解Java中五种常用的过滤器及其应用场景。 1. **使浏览器不缓存页面的过滤器** 这种过滤器主要用于防止浏览器对Web页面进行缓存,确保每次请求都能获取最新的内容。`ForceNoCacheFilter` 实现了 `javax...

    java一些 常用 的过滤 器

    在Java编程领域,过滤器(Filters)是一种常用的设计模式,用于处理数据流或请求响应链中的特定任务。根据所提供的标题、描述以及部分模糊的内容,我们可以深入探讨Java中一些常用的过滤器类型及其应用。 ### 1. ...

    六个有用的java过滤器

    ### 六个有用的Java过滤器知识点详解 在Java Web开发中,过滤器(Filter)是一种非常重要的技术,它能够对用户的请求和响应进行预处理或后处理,从而实现各种功能需求,例如设置缓存策略、登录验证、字符编码转换等...

    java中需要用到的各种过滤器

    ### Java中需要用到的各种过滤器知识点 #### 一、概述 在Java Web开发中,过滤器(Filter)是一种非常...这些过滤器在实际项目中有着广泛的应用场景,掌握它们的使用方法对于提高系统的功能性和安全性具有重要意义。

    JavaWeb开发几个常用的过滤器源码

    这里我们将深入探讨标题中提到的几个常用的过滤器及其源码实现。 首先,我们来看第一个过滤器:防止浏览器缓存页面的过滤器。这个过滤器的主要目的是确保每次用户访问页面时,都能获取到服务器最新更新的内容,而...

    java常用设计模式-过滤器模式

    Java 过滤器模式(Filter Pattern)是一种常用的设计模式,用于在请求到达目标对象之前或之后,对请求进行处理或过滤。该模式可以用于实现不同的功能,如验证、授权、日志记录、压缩等,将不同的操作当作过滤链中的...

    Android 常用格式过滤器(高级版) .zip

    综上所述,"Android 常用格式过滤器(高级版)"这个资源可能涵盖了各种常见的过滤场景和高级用法,可以帮助开发者更加精细地管理用户在EditText中的输入,提升应用的质量和用户体验。通过深入学习和实践,开发者可以...

    java RAS非对称公私密钥加密+AES公私密钥加密+过滤器入口出口统一处理

    本文将深入探讨Java环境下使用RSA非对称加密和AES对称加密的方法,以及如何通过过滤器实现入口和出口的统一处理。首先,我们来理解这两种加密算法。 **RSA非对称加密** RSA是一种非对称加密算法,其核心在于一对...

    java敏感词过滤功能

    通常,敏感词过滤器会使用字典树(如Trie树)或者关键词列表来存储敏感词,并提供方法来判断一个字符串是否包含敏感词,或者将敏感词替换为星号等其他字符。 `List.java`:这个文件可能是用于存储敏感词列表的数据...

    通过实例解析java过滤器和拦截器的区别

    Java过滤器和拦截器是两个常用的Web应用程序组件,它们之间的区别是什么呢?本文将通过实例解析,详细介绍Java过滤器和拦截器的区别,帮助读者更好地理解和应用它们。 1. 使用范围和规范不同 Filter是Servlet规范...

    Servlet3.0使用注解标注过滤器(Filter)

    ### Servlet 3.0 使用注解标注过滤器 #### 一、Servlet 3.0概述与新特性 Servlet 3.0 是 Java EE 6 的一部分,它引入了许多新的特性和改进,使得开发者能够更方便地开发 Web 应用程序。其中一个重要特性就是支持...

    logstash-filter-java:通过实现Java接口编写logstash过滤器

    配置文件中,使用`filter { java { jar => "/path/to/your/filter.jar" } }`来加载你的Java过滤器。 7. **测试与调试**: 可以通过Logstash的命令行工具或集成到现有日志处理管道中来测试你的过滤器。如果遇到问题,...

    通过过滤器判断用户权限

    该类导入了多个包,包括 `javax.servlet.*`、`javax.servlet.http.*`、`java.io.*`、`java.util.*` 等,这些都是编写过滤器时常用的包。其中 `javax.servlet.Filter` 是所有过滤器的基接口,必须实现其 `doFilter` ...

    servlet验证码制作和过滤器

    总的来说,Servlet验证码制作和过滤器是Java Web开发中重要的安全和功能组件。理解并掌握它们的原理和使用,能帮助我们构建更安全、更高效的Web应用。通过不断地实践和优化,我们可以提升用户体验,同时防范各种潜在...

    jsp中Filter类实现过滤器功能

    4. **销毁**:`destroy()`方法在容器卸载过滤器时调用,释放过滤器占用的资源。 #### 使用场景 这种过滤器可以广泛应用于论坛、博客、聊天室等各种Web应用中,用来防止不良信息的传播,提高网站的安全性和用户体验...

    hbase常用JAVA API

    可以设置开始和结束行键,过滤器等。 ```java Scan scan = new Scan(); ResultScanner scanner = table.getScanner(scan); for (Result res : scanner) { // 处理每一行结果 } scanner.close(); ``` 6. **...

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

    在这个方法中,可以释放过滤器使用的资源。 Filter 的应用场景 Filter 可以应用于多种场景,例如: * 认证和授权:可以使用 Filter 来实现认证和授权功能,例如检查用户的登录状态和权限。 * 日志记录:可以使用 ...

    过滤器--控制不同权限用户访问不同文件夹代码.rar

    总结来说,"过滤器--控制不同权限用户访问不同文件夹代码.rar"是一个实用的示例,它展示了如何使用Java Servlet过滤器技术实现精细的权限控制,确保不同权限级别的用户只能访问其被授权的资源。这样的功能对于保护...

    thinkPHP框架实现类似java过滤器的简单方法示例

    通过上述步骤,我们就在ThinkPHP框架中实现了一个简单的类似Java过滤器的功能,可以有效地对控制器进行登录验证,确保了业务逻辑的安全执行。 以上就是ThinkPHP框架实现类似Java过滤器功能的详细解析。更多关于...

Global site tag (gtag.js) - Google Analytics