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. a chip multiprocessor

    COMPUTER OR GANIZATION AND ARCHITECTURE DESIGNING FOR PERFORMANCE NINTH EDITION A multicore computer ...

  2. 兼容iOS 10 资料整理笔记

    原文链接:http://www.jianshu.com/p/0cc7aad638d9 1.Notification(通知) 自从Notification被引入之后,苹果就不断的更新优化,但这些更新优化 ...

  3. web前端书籍

    前端开发 必看的书籍资料(转自CSDN郭小北V5) 一. html + css 这部分建议在 w3school 在线教程 上学习,边学边练,每个属性后还有在线测试. 然后过一遍之后可以模仿一些网站做些 ...

  4. QList

    #include <QCoreApplication> #include<QList> #include<QDebug> int main(int argc, ch ...

  5. css3图片翻转

    <!DOCTYPE> <html lang="en"> <head> <meta http-equiv="Content-Typ ...

  6. CentOS 7.2 安装配置Samba服务器

    1背景 转Linux刚刚1年,vim操作还不能应对工程代码,之前一直都是Gnome桌面 + Clion 作开发环境,无奈在服务器上没有这样的环境, 看同事是(Windows)Source Insigh ...

  7. 使用OpenSSL为支付宝生成RSA私钥

    通过openssl工具生成RSA的公钥和私钥(opnssl工具可在互联网中下载到,也可以点此下载无线接口包,里面包含此工具)打开openssl文件夹下的bin文件夹,执行openssl.exe文件: ...

  8. SpringMVC操作指南-MVC-搭建SpringMVC项目结构(基于Java API和注解)

  9. Web自动化测试工具调研

    背景 Web自动化测试越来越被重视, 因为现在Web已经是工程化的状态. 如何通过工具测试, 保证Web开发的质量,提升开发效率,是Web工具的诞生的来由. Web测试分为以下几个方面: 1. 界面测 ...

  10. PIXHAWK DIY LED扩展板

    板载的状态LED灯,因为各种灰机的外壳有可能会被挡住看不到状态.那么我们也是可以用arduino板子来扩展实现外置,其实就是用328P芯片来实现. 这程序支持WS2812B的全彩LED灯. 默认的信号 ...