filter过滤器次要应用于前台向后盾传递数据是的过滤操作。

一、使浏览器不缓存页面的过滤器

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  {  }}

二、检测用户是否登陆的过滤器

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 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避免用户拜访一些未被受权的资源

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>