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. * 用于设置 HTTP 请求字符编码的过滤器,通过过滤器参数encoding指明使用何种字符编码,用于处理Html Form请求参数的中文问题
  5. */
  6. public class CharacterEncodingFilter
  7. implements Filter
  8. {
  9. protected FilterConfig filterConfig = null;
  10. protected String encoding = "";
  11. public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException
  12. {
  13. if(encoding != null)
  14. servletRequest.setCharacterEncoding(encoding);
  15. filterChain.doFilter(servletRequest, servletResponse);
  16. }
  17. public void destroy()
  18. {
  19. filterConfig = null;
  20. encoding = null;
  21. }
  22. public void init(FilterConfig filterConfig) throws ServletException
  23. {
  24. this.filterConfig = filterConfig;
  25. this.encoding = filterConfig.getInitParameter("encoding");
  26. }
  27. }

四、记录用户的访问操作器

代码:
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>

java中filter的用法 内部资料 请勿转载 谢谢合作的更多相关文章

  1. filter(滤镜) 属性 内部资料 请勿转载 谢谢合作

    Filter 描述 none 默认值,没有效果. blur(px) 给图像设置高斯模糊."radius"一值设定高斯函数的标准差,或者是屏幕上以多少像素融在一起, 所以值越大越模糊 ...

  2. hibernate缓存机制详细分析 复制代码 内部资料 请勿转载 谢谢合作

    您可以通过点击 右下角 的按钮 来对文章内容作出评价, 也可以通过左下方的 关注按钮 来关注我的博客的最新动态. 如果文章内容对您有帮助, 不要忘记点击右下角的 推荐按钮 来支持一下哦 如果您对文章内 ...

  3. Struts 笔记 内部资料 请勿转载 谢谢合作

    Struts 概述 随着MVC 模式的广泛使用,催生了MVC 框架的产生.在所有的MVC 框架中,出现最早,应用最广的就是Struts 框架. Struts 的起源 Struts 是Apache 软件 ...

  4. Struts框架2ActionError类 内部资料 请勿转载 谢谢合作

    ActionError类从不独立进行错误处理,它们总是被存储在ActionErrors对象中.ActionErrors对象保存ActionError类的集合以及它们特定的属性值,我们可以使用自己定义的 ...

  5. Hibernate框架简述 内部资料 请勿转载 谢谢合作

    Hibernate的核心组件在基于MVC设计模式的JAVA WEB应用中,Hibernate可以作为模型层/数据访问层.它通过配置文件(hibernate.properties或hibernate.c ...

  6. struts.xml配置详解 内部资料 请勿转载 谢谢合作

    1.<include> 利用include标签,可以将一个struts.xml配置文件分割成多个配置文件,然后在struts.xml中使用<include>标签引入其他配置文件 ...

  7. Struts框架 内部资料 请勿转载 谢谢合作

    Struts框架 struts框架具有组件的模块化,灵活性和重用性的优点,同时简化了基于MVC的web应用程序的开发. 本章详细讨论struts架构.我们将看到struts是如何清晰地区分控制,事务逻 ...

  8. JDBC 内部资料 请勿转载 谢谢合作

    一.JDBC常用接口.类介绍 JDBC提供对独立于数据库统一的API,用以执行SQL命令.API常用的类.接口如下: DriverManager 管理JDBC驱动的服务类,主要通过它获取Connect ...

  9. Web Service简介 内部资料 请勿转载 谢谢合作

    1.1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求, ...

随机推荐

  1. C#发送邮件时提示:“不允许使用邮箱名称。服务器响应为:”的错误解决办法

    由于项目需要,要为客户提供一个定期发送邮件的程序.本来原来自己还写过,但新写的程序一晚上也没通过测试,总是提示"不允许使用邮箱名称.服务器响应为..." 经过在网上搜索查找解决办法 ...

  2. Codevs 3728 联合权值

    问题描述 无向连通图G有n个点,n-1条边.点从1到n依次编号,编号为i的点的权值为Wi ,每 条边的长度均为1.图上两点(u,v)的距离定义为u点到v点的最短距离.对于图G上的点 对(u,v),若它 ...

  3. C++中为什么要将析构函数定义成虚函数

    构造函数不可以是虚函数的,这个很显然,毕竟虚函数都对应一个虚函数表,虚函数表是存在对象内存空间的,如果构造函数是虚的,就需要一个虚函数表来调用,但是类还没实例化没有内存空间就没有虚函数表,这根本就是个 ...

  4. JavaWeb三大组件——过滤器的运行机制理解

    过滤器Filter 文章前言:本文侧重实用和理解. 一.过滤器的概念. lFilter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有 ...

  5. android中使用startactivityforresult跳转Activity后需要重写onBackPressed()方法

    在android项目中经常会用startactivityforresult从一个Activity跳转到另一个Activity(这里指Activity_A和Activity_B),你可以从Activit ...

  6. Python开发【前端】:jQuery

    jQuery简介 jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架).jQuery设计的宗旨是&qu ...

  7. Java不同编码方式,中英文字符所占字节数

    测试代码 public class Test { public static void main(String[] args){ String[] charsetNames={ "UTF-8 ...

  8. Error : should use android:showAsAction when not using support library

    我有一个ListActivity,然后一个menu/options.xml android:showAsAction报错: should use android:showAsAction when n ...

  9. Mongodb在Linux下的安装和启动和配置

    第一步:下载mongodb安装包,下载版本:2.0.2-rc2 下载链接: http://fastdl.mongodb.org/linux/mongodb-linux-i686-2.0.1.tgz 第 ...

  10. Linux:krb5

    Kerberos协议主要用于计算机网络的身份鉴别(Authentication), 其特点是用户只需输入一次身份验证信息就可以凭借此验证获得的票据(ticket-granting ticket)访问多 ...