`

filter

阅读更多
filter过滤器主要使用于前台向后台传递数据是的过滤操作。程度很简单就不说明了,直接给几个已经写好的代码:
一、使浏览器不缓存页面的过滤器

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
{
}
}
二、检测用户是否登陆的过滤器

1.import javax.servlet.*;  
2.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;  
• 
•/** 
• * 用于检测用户是否登陆的过滤器,如果未登录,则重定向到指的登录页面<p> 
• * 配置参数<p> 
• * checkSessionKey 需检查的在 Session 中保存的关键字<br/> 
• * redirectURL 如果用户未登录,则重定向到指定的页面,URL不包括 ContextPath<br/> 
• * notCheckURLList 不做检查的URL列表,以分号分开,并且 URL 中不包括 ContextPath<br/> 
• */ 
•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());  
•   }  
•  }  
• }  
•} 
三、字符编码的过滤器


1.import javax.servlet.*;  
2.import java.io.IOException;  
3. 
4./** 
5. * 用于设置 HTTP 请求字符编码的过滤器,通过过滤器参数encoding指明使用何种字符编码,用于处理Html Form请求参数的中文问题 
6. */ 
7.public class CharacterEncodingFilter  
8. implements Filter  
9.{  
10. protected FilterConfig filterConfig = null;  
11. protected String encoding = "";  
12. 
13. public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException  
14. {  
15.        if(encoding != null)  
16.         servletRequest.setCharacterEncoding(encoding);  
17.        filterChain.doFilter(servletRequest, servletResponse);  
18. }  
19. 
20. public void destroy()  
21. {  
22.  filterConfig = null;  
23.  encoding = null;  
24. }  
25. 
26. public void init(FilterConfig filterConfig) throws ServletException  
27. {  
28.        this.filterConfig = filterConfig;  
29.        this.encoding = filterConfig.getInitParameter("encoding");  
30. 
31. }  
32.} 
四、记录用户的访问操作器

代码:
package com.qwserv.itm.pfl.log.svr;

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 java.text.SimpleDateFormat;
import javax.servlet.http.HttpServletRequest;
import com.qwserv.itm.api.pfl.sm.vo.Person;
import java.sql.*;
import com.qwserv.itm.api.ServiceAccess;
import com.qwserv.itm.util.toolkit.DebugUtil;

public class ObserveFilter implements Filter {
    protected static DebugUtil log = DebugUtil.getInstances("pfl-log", ObserveFilter.class);
    public void destroy() {
    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
            ServletException {
        //记录用户的访问操作
        HttpServletRequest request1 = (HttpServletRequest)request;
        StringBuffer url = request1.getRequestURL();

        //对url进行过滤,如果是js/css/image则不进行处理
        if (judgeFile(url.toString())){
            String operTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").
                              format(new java.util.Date());
            String hostIp = request.getRemoteAddr();
            String sessionId = request1.getRequestedSessionId();
            String userId = "";
            Person person = (Person)request1.getSession().getAttribute("userObj");
            if (null != person && null != person.getUser()){
                userId = person.getUser().getId();
            }
            String queryString = request1.getQueryString();
            if (null != queryString) {
                url.append('?');
                url.append(queryString);
            }

            //保存到数据库中
            saveToDb(userId,hostIp,sessionId,url.toString(),operTime,"");
        }
        // Pass control on to the next filter
        chain.doFilter(request, response);
    }

    public void init(FilterConfig filterConfig) throws ServletException {
    }

    public boolean judgeFile(String url){
        if (url.endsWith(".gif") || url.endsWith(".jpg") || url.endsWith(".png")
            || url.endsWith(".bmp") || url.endsWith(".css") || url.endsWith(".js")
                || url.endsWith(".jsx")){
            return false;
        } else {
            return true;
        }
    }

    public int saveToDb(String userId, String hostIp,String sessionId,String url,
                         String operTime,String desc){
            //将报表任务数据保存到数据库中
            Connection conn = null;
            Statement st = null;

            try {

                //构造sql表达式,将数据插入数据库
                conn = ServiceAccess.getSystemSupportService().getDefaultConnection();
                st = conn.createStatement();
                String sql = "insert into LOG_OBSERVE_HISTORY(USERID,URL,Detail,SessionID,HostName,StartDate)   values('"+
                        userId + "','" + url + "','" + desc + "','" + sessionId
                        + "','" + hostIp + "','" + operTime + "')";
                if (ServiceAccess.getSystemSupportService().getConnectionType(conn)==ServiceAccess.getSystemSupportService().JCA_TYPE_ORACLE){
                    sql = "insert into LOG_OBSERVE_HISTORY(Id,USERID,URL,Detail,SessionID,HostName,StartDate)  values(LOG_OBSERVE_SEQ.nextval,'"+
                        userId + "','" + url + "','" + desc + "','" + sessionId
                        + "','" + hostIp + "',TO_DATE('" + operTime
                        + "','YYYY-MM-DD HH24:MI:SS'))";
                }
                st.executeUpdate(sql);
            } catch (Exception e) {
                e.printStackTrace();
                log.error("--------------------The url String is:" + url + "-------------------------------");
                return 1;  //表示操作失败
            } finally {
                if (null != st)
                {
                    try{
                        st.close();
                    }
                    catch(Exception e)
                    {
                        e.printStackTrace();
                    }

                    st = null;
                }

                if (conn != null) {
                    try {
                        conn.close();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    conn = null;
                }
            }

            return 0;  //表示操作成功
    }
}



    <filter>
        <filter-name>ObserveFilter</filter-name>
        <filter-class>com.qwserv.itm.pfl.log.svr.ObserveFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>ObserveFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

五.Filter防止用户访问一些未被授权的资源


1.package
com.drp.util.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;  
•import javax.servlet.http.HttpServletResponse;  
•import javax.servlet.http.HttpSession;  
• 
•public class AuthFilter implements Filter {  
•   
• public void destroy() {  
• 
• }  
• 
• public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,  
•   FilterChain filterChain) throws IOException, ServletException {//1,doFilter方法的第一个参数为ServletRequest对象。此对象给过滤器提供了对进入的信息(包括表单数据、cookie和HTTP请求头)的完全访问。第二个参数为ServletResponse,通常在简单的过滤器中忽略此参数。最后一个参数为FilterChain,此参数用来调用servlet或JSP页。  
• 
•  HttpServletRequest request = (HttpServletRequest)servletRequest;//;//如果处理HTTP请求,并且需要访问诸如getHeader或getCookies等在ServletRequest中无法得到的方法,就要把此request对象构造成HttpServletRequest  
•  HttpServletResponse response = (HttpServletResponse)servletResponse。  
• 
• 
•  String currentURL = request.getRequestURI();//取得根目录所对应的绝对路径:  
• 
•    
•  String targetURL = currentURL.substring(currentURL.indexOf("/", 1), currentURL.length());  //截取到当前文件名用于比较  
• 
•  HttpSession session = request.getSession(false);  
•    
•  if (!"/login.jsp".equals(targetURL)) {//判断当前页是否是重定向以后的登录页面页面,如果是就不做session的判断,防止出现死循环  
•   if (session == null || session.getAttribute("user") == null) {//*用户登录以后需手动添加session  
•    System.out.println("request.getContextPath()=" + request.getContextPath());  
•    response.sendRedirect(request.getContextPath() + "/login.jsp");//如果session为空表示用户没有登录就重定向到login.jsp页面  
•    return;  
•   }  
•  }  
•  //加入filter链继续向下执行  
•  filterChain.doFilter(request, response);//.调用FilterChain对象的doFilter方法。Filter接口的doFilter方法取一个FilterChain对象作为它的一个参数。在调用此对象的doFilter方法时,激活下一个相关的过滤器。如果没有另一个过滤器与servlet或JSP页面关联,则servlet或JSP页面被激活。  
• 
• }  
• 
• public void init(FilterConfig filterConfig) throws ServletException {  
• 
• }  
•} 
<filter>
   <filter-name>AuthFilter</filter-name>
   <filter-class>com.drp.util.filter.AuthFilter</filter-class>
</filter>
 
<filter-mapping>
   <filter-name>AuthFilter</filter-name>
   <url-pattern>*.jsp</url-pattern>//表示对所有jsp文件有效
</filter-mapping>

分享到:
评论

相关推荐

    预防XSS攻击和SQL注入XssFilter

    &lt;filter-name&gt;XssFilter&lt;/filter-name&gt; &lt;filter-class&gt;com.xxx.Filter.XssFilter&lt;/filter-class&gt; &lt;/filter&gt; &lt;filter-mapping&gt; &lt;filter-name&gt;XssFilter&lt;/filter-name&gt; &lt;url-pattern&gt;/* &lt;/filter-mapping&gt;

    filter对request请求拦截,对请求参数进行修改

    对request请求进行拦截,... &lt;filter-class&gt;weixin.idea.waiting.cq.controller.JsFilter&lt;/filter-class&gt; &lt;/filter&gt; &lt;filter-mapping&gt; &lt;filter-name&gt;sqlFilter&lt;/filter-name&gt; &lt;url-pattern&gt;/* &lt;/filter-mapping&gt;

    delphi资源-Filter中的模糊过滤

    Filter中的模糊过滤: 要实现模糊过滤,BDE中要用“*”,不允许使用“Like”关键字,且只能向后匹配,如“Fcode=’101*’”;而ADO则是使用“%”或“*”都可以,可以使用“Like”关键字,且和SQL语句用法一致,可以...

    NDIS Filter Drivers指南

    Filter Drivers主要包括以下特性:   1) 一个Filter Drivers实例叫Filter Module。Filter Module附加在一个适配器的微端口驱动上, 来自相同或不同Filter Drivers的多个Filter Module都可以被堆叠在一个网络...

    Servlet Filter 的单元测试

    Servlet Filter 的单元测试Servlet Filter 的单元测试Servlet Filter 的单元测试Servlet Filter 的单元测试Servlet Filter 的单元测试

    Bloom Filter概念和原理

    Bloom Filter是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合。Bloom Filter的这种高效是有一定代价的:在判断一个元素是否属于某个集合时,有可能会把不...

    Electronic Filter Design Handbook

    Refinements in LC Filter Design and the Use of Resistive Networks Chapter 9. Design and Selection of Inductors for LC Filters Chapter 10. Component Selection for LC and Active Filters Chapter 11. ...

    利用java filter 实现业务异常拦截源码

    利用java filter 实现业务异常拦截 跳转到错误信息提示页面 我们在做项目中肯定都会遇到自定义业务异常 ,然后将业务异常信息跳转的统一的信息提示页面的情况,比如我们在struts的时候我们会用到struts的异常处理...

    java filter打印请求返回参数

    java filter打印请求返回参数

    FilterPro低通滤波器设计软件及中文使用资料.rar_FilterProDT 下载_filterpro

    FilterPro低通滤波器设计软件及中文使用资料,用于设计滤波器,放大器

    What is notch filter

    A Notch filter is a filter that passes all frequencies except those in a stop band centered on a center frequency. A closely related Knowledgebase item discusses the concept of the Q of a filter. ...

    Delphi 判断cxGrid表格是否在filter状态.rar

    Delphi 判断cxGrid表格是否在filter状态:  procedure TFrmOrderBy.BtnOrderClick(Sender: TObject);  begin  ADODataSet1.Filtered := false;  ADODataSet1.Filter := 'dePartMent=''软件部''';  ADODataSet1....

    FilterPro软件安装

    ti官方软件FilterPro,滤波器设计软件,win10可运行

    Kalman Filter卡尔曼滤波 java实现

    KalmanFilter,KalmanFilter3,KalmanFilter5 一共7种,以上三种实现保证可用,其余待调试,调试函数写好,直接运行即可 KalmanFilter KalmanFilter2 KalmanFilter3 KalmanFilter4 KalmanFilter5 KalmanFilter6 Kalman...

    filter wiz pro v5

    Filter Wiz Pro适用于低于-1Hz 至10MHz 范围内的截止频率,而适用于此范围的无源滤波器设计必须具备非常大的组件值和组件尺寸  Filter Wiz Pro在几分钟内便能让您设计、优化和仿真一套完整的多级有源滤波器解决方案...

    Microwave_filter_design

    This thesis presents an entire design process for filter synthesis of narrow to moderate bandwidth filters, from an investigation of the basic theory through to the development of a generalised ...

    C语言头文件 FILTER

    C语言头文件 FILTERC语言头文件 FILTERC语言头文件 FILTERC语言头文件 FILTERC语言头文件 FILTERC语言头文件 FILTERC语言头文件 FILTERC语言头文件 FILTERC语言头文件 FILTERC语言头文件 FILTERC语言头文件 FILTERC...

    cors-filter-1.7.jar,cors-filter-2.5.jar,cors-filter-2.10.jar

    Tomcat 在设置跨域 jar包的一部分,cors-filter-1.7.jar,cors-filter-2.5.jar,cors-filter-2.10.jar

    matalb函数filter的C++实现

    matlab函数filter的C++简答实现

    jquery.multiselect.filter

    jquery.multiselect.filter.js ; jquery.multiselect.filter.css

Global site tag (gtag.js) - Google Analytics