java中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>

转载于:https://www.cnblogs.com/yqskj/articles/2226774.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/275224.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

open-falcon_NASA在Falcon 9上带回了蠕虫-其背后的故事是什么?

open-falconYes, that’s right. The classic NASA “worm” logo is back! An image of the revived NASA worm logo was released on Twitter by NASA Administrator Jim Bridenstine as well as press release on the NASA.gov website. NASA explained that original NASA …

听说你对 ES6 class 类还不是很了解

大家好&#xff0c;我是若川。最近组织了源码共读活动&#xff0c;感兴趣的可以加我微信 ruochuan12 参与。前言在ES5中是原型函数&#xff0c;到了ES6中出现了"类"的概念。等同于是ES5的语法糖&#xff0c;大大提升了编写代码的速度&#xff0c;本文只讲一些常用的&…

一篇文章带你搞懂前端面试技巧及进阶路线

大家好&#xff0c;我是若川。最近有很多朋友给我后台留言&#xff1a;自己投了不少简历&#xff0c;但是收到的面试邀请却特别少&#xff1b;好不容易收到了大厂的面试邀请&#xff0c;但由于对面试流程不清楚&#xff0c;准备的特别不充分&#xff0c;结果也挂了&#xff1b;…

小屏幕 ui设计_UI设计基础:屏幕

小屏幕 ui设计重点 (Top highlight)第4部分 (Part 4) Welcome to the fourth part of the UI Design basics. This time we’ll cover the screens you’ll likely design for. This is also a part of the free chapters from Designing User Interfaces.欢迎使用UI设计基础知…

RabbitMQ指南之四:路由(Routing)和直连交换机(Direct Exchange)

在上一章中&#xff0c;我们构建了一个简单的日志系统&#xff0c;我们可以把消息广播给很多的消费者。在本章中我们将增加一个特性&#xff1a;我们可以订阅这些信息中的一些信息。例如&#xff0c;我们希望只将error级别的错误存储到硬盘中&#xff0c;同时可以将所有级别&am…

不用任何插件实现 WordPress 的彩色标签云

侧边栏的标签云&#xff08;Tag Cloud&#xff09;一直是 WordPress 2.3 以后的内置功能&#xff0c;一般直接调用函数wp_tag_cloud 或者在 Widgets 里开启即可&#xff0c;但是默认的全部是一个颜色&#xff0c;只是大小不一样&#xff0c;很是不顺眼&#xff0c;虽然可以用 S…

随时随地能写代码, vscode.dev 出手了

大家好&#xff0c;我是若川。最近组织了源码共读活动&#xff0c;感兴趣的可以加我微信 ruochuan12 参与。今天偶然看到了 VSCode 官方发布了一条激动人心的 Twitter&#xff0c;vscode.dev[1] 域名上线了&#xff01;image-20211021211915942新的域名 vscode.dev[2] 它是一个…

七种主流设计风格_您是哪种设计风格?

七种主流设计风格重点 (Top highlight)I had an idea for another mindblowing test, so here it is. Since you guys liked the first one so much, and I got so many nice, funny responses and private messages on how accurate it actually was, I thought you will prob…

React 18 Beta 来了

大家好&#xff0c;我是若川。最近组织了源码共读活动&#xff0c;感兴趣的可以加我微信 ruochuan12 参与&#xff0c;目前近3000人参与。经过「React18工作组」几个月工作&#xff0c;11月16日v18终于从Alpha版本更新到Beta版本。本文会解释&#xff1a;这次更新带来的变化对开…

osg着色语言着色_探索数字着色

osg着色语言着色Learn how to colorize icons with your NounPro subscription and Adobe Illustrator.了解如何使用NounPro订阅和Adobe Illustrator为图标着色。 For those who want to level up their black and white Noun Project icons with a splash of color, unlockin…

CSS3实践之路(一):CSS3之我观

CSS 的英文全称Cascading Style Sheets&#xff0c;中文意思是级联样式表,通过设立样式表&#xff0c;可以统一地控制HMTL中各DOM元素的显示属性。级联样式表可以使人更能有效地控制网页外观。使用级联样式表&#xff0c;可以扩充精确指定网页元素位置&#xff0c;外观以及创建…

18个项目必备的JavaScript代码片段——数组篇

大家好&#xff0c;我是若川。最近组织了源码共读活动&#xff0c;感兴趣的可以加我微信 ruochuan12 参与&#xff0c;目前近3000人参与&#xff0c;0-5年工作经验的都可以参与学习。1.chunk转换二维数组将数组&#xff08;array&#xff09;拆分成多个数组&#xff0c;并将这些…

美学评价_卡美学的真正美

美学评价In collectible card games like Hearthstone, Legends of Runeterra, and Magic: The Gathering, the aesthetic of the cards is indubitably one of the greatest highlights for many, if not all players. Although the game loop is reliant on physically build…

好程序员web前端分享CSS Bug、CSS Hack和Filter学习笔记

为什么80%的码农都做不了架构师&#xff1f;>>> CSS Bug、CSS Hack和Filter学习笔记 1)CSS Bug:CSS样式在各浏览器中解析不一致的情况&#xff0c;或者说CSS样式在浏览器中不能正确显示的问题称为CSS bug. 2)CSS Hack: CSS中&#xff0c;Hack是指一种兼容CSS在不同…

ux和ui_设计更好的结帐体验-UX / UI案例研究

ux和uiPlated Cuisine is a food ordering and delivery app for Plated Cuisine Restaurant founded and managed by Rayo Odusanya.Plated Cuisine是由Rayo Odusanya创建和管理的Plated Cuisine Restaurant的食品订购和交付应用程序。 A short background about Rayo Rayo O…

Django中ajax发送post请求,报403错误CSRF验证失败解决办法

今天学习Django框架&#xff0c;用ajax向后台发送post请求&#xff0c;直接报了403错误&#xff0c;说CSRF验证失败&#xff1b;先前用模板的话都是在里面加一个 {% csrf_token %} 就直接搞定了CSRF的问题了&#xff1b;很显然&#xff0c;用ajax发送post请求这样就白搭了&…

如何在EXCEL中添加下拉框

筛选主要是将已有列的信息以下拉框的形式显示出来 选中数据栏中的筛选按钮即可生成 如果是想添加未有信息则如下图步骤 首先&#xff0c;选择你要出现下拉的区域&#xff0c;在数据栏中的选择数据有效性 然后&#xff0c;下面对话框中&#xff0c;有效性条件中按如下设置即可&a…

每次新增页面复制粘贴?100多行源码的 element-ui 的新增组件功能教你解愁

1. 前言大家好&#xff0c;我是若川。最近组织了源码共读活动&#xff0c;感兴趣的可以点此加我微信ruochuan12 参与&#xff0c;每周大家一起学习200行左右的源码&#xff0c;共同进步。已进行三个月了&#xff0c;很多小伙伴表示收获颇丰。想学源码&#xff0c;极力推荐之前我…

原子设计_您需要了解的有关原子设计的4件事

原子设计重点 (Top highlight)Industries such as Architecture or Industrial Design have developed smart modular systems for manufacturing extremely complex objects like airplanes, ships, and skyscrapers. Inspired by this, Atomic Design was proposed as a syst…

C#中的Clipboard与ContextMenuStrip应用举例

今天&#xff0c;突然想起了怎样在一个文本中实现复制、剪切与粘贴的功能&#xff0c;并给这些功能添加右键的快捷方式。于是&#xff0c;就用自己的VS2008写了一个简单的小应用&#xff0c;以熟悉C#中剪贴板与快捷菜单的使用。 首先&#xff0c;我们不难发现&#xff0c;剪贴板…