几个有用的web过滤器

来源:互联网 发布:襄阳java培训机构 编辑:程序博客网 时间:2024/06/16 05:31
一、使浏览器不缓存页面的过滤器
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限制用户浏览权限 
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文件里动下就可以。 
以下是Filter文件代码: 
<!-- 判断页面的访问权限 -->   
  
<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,不然过滤器也起不了作用。 
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 怎么看华为麦芒6信号差怎么办 华为手机锁屏密码忘了怎么办 苹果手机进水后手机卡无服务怎么办 摩拜单车绑定的手机号注销了怎么办 摩拜单车注册的手机号注销了怎么办 摩拜单车注册手机号换了怎么办 被手机店骗话费送合约机怎么办 机蜜租赁的手机丢了怎么办 合约机返话费手机掉了怎么办 手机摔坏了开不了机怎么办 华为魅特10屏幕锁住了怎么办 电信送的路由器只有一个端口怎么办 苹果手机5c屏幕死机了怎么办 日版苹果手机显示无服务怎么办 iphone有锁4g变3g怎么办 耳机胶套脱落掉入耳朵怎么办 苹果笔记本电用完了开机了怎么办 华为荣耀5x锁屏密码忘了怎么办 华为荣耀锁屏密码忘了怎么办 华为手机屏锁密码忘了怎么办 华为荣耀9青春版相机很模糊怎么办 华为荣耀7手机照相忽然模糊怎么办 苹果5s进水开不了机怎么办 红米4a玩王者荣耀卡怎么办 老是显示媒体存储以停止运行怎么办 支付宝邮二维码地址留错了怎么办 华为畅享5s太卡怎么办 金立手机导航gps信号弱怎么办 贴了膜后边缘有气泡怎么办 魅族mx5刷机失败然后黑屏怎么办 魅族手机无线网玩王者卡怎么办 魅族手机玩王者荣耀卡怎么办 魅族手机导航gps信号弱怎么办 魅族手机4g信号差怎么办 魅族手机下面一排键失灵怎么办 魅族手机冲不进去电怎么办 苹果账号付款了又让付款怎么办 魅蓝3s开机定屏怎么办 魅族手机未找到固件怎么办不用电脑 魅族手机触屏局部失灵怎么办 更新了魅蓝的新系统掉帧怎么办