SpringMVC 过滤器
参考:
http://qq-22530757.iteye.com/blog/2177513
http://www.jdon.com/dl/best/spring-security.html
https://blog.csdn.net/MissEel/article/details/79351231
https://www.cnblogs.com/edwardlauxh/archive/2010/03/11/1918618.html
一. 概述
Spring MVC中的过滤器有两种(我自己理解的),一种称为普通过滤器。另一种称为安全过滤器。这里只讨论普通过滤器,其中普通过滤器又分为两种:① SpringMVC框架自带的过滤器;② 开发人员自定义的过滤器。下面分别进行讲解
二. SpringMVC框架自带的过滤器
1. 概述
在spring-web.jar包中提供有很多过滤器,这些过滤器位于org.springframework.web.filter并且理所当然地实现了javax.servlet.Filter接口
不过,这些SpringMVC框架自带的过滤器实现的方式主要分为以下几类:
(1) 直接实现Filter,这一类过滤器只有CompositeFilter;
(2) 继承抽象类GenericFilterBean,该类实现了javax.servlet.Filter,这一类的过滤器只有一个,即DelegatingFilterProxy;
(3) 继承抽象类OncePerRequestFilter,该类为GenericFilterBean的直接子类,这一类过滤器包括CharacterEncodingFilter、HiddenHttpMethodFilter、HttpPutFormContentFilter、RequestContextFilter和ShallowEtagHeaderFilter;
(4) 继承抽象类AbstractRequestLoggingFilter,该类为OncePerRequestFilter的直接子类,这一类过滤器包括CommonsRequestLoggingFilter、Log4jNestedDiagnosticContextFilter和ServletContextRequestLoggingFilter。
2. 过滤器放在容器结构的什么位置?
过滤器放在web资源之前,可以在请求抵达它所应用的web资源(可以是一个Servlet、一个Jsp页面,甚至是一个HTML页面)之前截获进入的请求,并且在它返回到客户之前截获输出请求。Filter:用来拦截请求,处于客户端与被请求资源之间,目的是重用代码。Filter链,在web.xml中哪个先配置,哪个就先调用。在filter中也可以配置一些初始化参数。
Java中的Filter 并不是一个标准的Servlet ,它不能处理用户请求,也不能对客户端生成响应。 主要用于对HttpServletRequest 进行预处理,也可以对HttpServletResponse 进行后处理,是个典型的处理链。
3. Filter 有如下几个种类:
l 用户授权的Filter: Filter 负责检查用户请求,根据请求过滤用户非法请求。
l 日志Filter: 详细记录某些特殊的用户请求。
l 负责解码的Filter: 包括对非标准编码的请求解码。
l 能改变XML 内容的XSLTFilter 等。
4. Filter 有如下几个用处:
l 在HttpServletRequest 到达Servlet 之前,拦截客户的HttpServletRequest 。
l 根据需要检查HttpServletRequest ,也可以修改HttpServletRequest 头和数据。
l 在HttpServletResponse 到达客户端之前,拦截HttpServletResponse 。
l 根据需要检查HttpServletResponse ,可以修改HttpServletResponse 头和数据。
5. 创建一个Filter 只需两个步骤:
说明:SpringMVC框架自带的过滤器也需要实现以下两个步骤,只不过第一步已经完成,不用我们自己写了,但是自定义过滤器的话,这两步都需要我们完成
(1)创建Filter 处理类(必须实现javax.servlet.Filter 接口)
(2)在web.xml 文件中配置Filter
6. javax.servlet.Filter 接口
创建Filter 必须实现javax.servlet.Filter 接口,在该接口中定义了三个方法。
• void init(FilterConfig config): 用于完成Filter 的初始化。
• void destroy(): 用于Filter 销毁前,完成某些资源的回收。
• void doFilter(ServletRequest request, ServletResponse response,FilterChain chain): 实现过滤功能,该方法就是对每个请求及响应增加的额外处理。
过滤器Filter也具有生命周期:init()->doFilter()->destroy(),由部署文件中的filter元素驱动。
7. 以SpringMVC框架自带的编码处理过滤器为例来学习过滤器springmvc项目中的使用
(1)创建Filter 处理类(必须实现javax.servlet.Filter 接口)
这一步SpringMVC已经完成,不需要我们自己写了
(2)在配置文件中进行配置,配置文件为dispatcher-servlet的配置文件,我这里是dispatcher-servlet.xml,配置内容如下
- <!-- 定义Filter -->
- <filter>
- <!-- Filter的名字 -->
- <filter-name>encodingFilter</filter-name>
- <!-- Filter的实现类 -->
- <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
- <!-- init-prama为注入的set参数 -->
- <init-param>
- <param-name>encoding</param-name>
- <param-value>UTF-8</param-value>
- </init-param>
- <init-param>
- <param-name>forceEncoding</param-name>
- <param-value>true</param-value>
- </init-param>
- </filter>
- <!-- 定义Filter拦截的URL地址 -->
- <filter-mapping>
- <!-- Filter的名字 -->
- <filter-name>encodingFilter</filter-name>
- <!-- Filter负责拦截的URL 全部以/的请求,如果<url-pattern>/*.action </>,将会以拦截*.action的请求-->
- <url-pattern>/*</url-pattern>
- </filter-mapping>
其中,每个<filter></filter>对应一个<filter-mapping></filter-mapping>,用于配置该过滤器都过滤哪些url的请求
SpringMVC 过滤器的更多相关文章
- SpringMVC 过滤器Filter使用解析
SpringMVC框架是一个成熟的优秀java web开发框架,学习研究框架设计有助于我们更好的理解和掌握spring MVC,设计和写出更符合的结构和代码. 本节主要是研读SpringMVC框架中的 ...
- springmvc 过滤器和拦截器
1. 拦截器: interceptor 过滤器(filter)与拦截器(intercepter)相同点:1) 都可以拦截请求,过滤请求2) 都是应用了过滤器(责任链)设计模式 2.区别: 1) fi ...
- SpringMVC源码阅读:过滤器
1.前言 SpringMVC是目前J2EE平台的主流Web框架,不熟悉的园友可以看SpringMVC源码阅读入门,它交代了SpringMVC的基础知识和源码阅读的技巧 本文将通过源码(基于Spring ...
- 捷易拍与springMVC系统结合
1. 捷易拍高拍仪在jsp页面的调用 使用ActiveX插件的方式处理解决此问题,捷易拍公司提供了支持IE8以上的32位浏览器的插件,安装插件后,我们可以使用Object标签,使用高拍仪 注意: 1. ...
- SpringMVC的拦截器(Interceptor)和过滤器(Filter)的区别与联系
摘自: http://blog.csdn.net/xiaoyaotan_111/article/details/53817918 一 简介 (1)过滤器: 依赖于servlet容器.在实现上基于函数回 ...
- 【Spring】30、Spring,SpringMVC用法汇总
SpringMVC的工作原理图: springMVC中的几个组件: 前端控制器(DispatcherServlet):接收请求,响应结果,相当于电脑的CPU. 处理器映射器(HandlerMappin ...
- SpringMVC源码阅读系列汇总
1.前言 1.1 导入 SpringMVC是基于Servlet和Spring框架设计的Web框架,做JavaWeb的同学应该都知道 本文基于Spring4.3.7源码分析,(不要被图片欺骗了,手动滑稽 ...
- spring mvc过滤器filter
SpringMVC 过滤器Filter使用解析 1.如上所示的spring-web.jar包结构所示, Spring的web包中中提供有很多过滤器,这些过滤器位于org.springframework ...
- Springmvc request response log
Log Incoming Requests In Spring | Java Development Journalhttps://www.javadevjournal.com/spring/log- ...
随机推荐
- http应答码
1xx - 信息提示 这些状态代码表示临时的响应.客户端在收到常规响应之前,应准备接收一个或多个 1xx 响应.· 100 - Continue 初始的请求已经接受,客户应当继续发送请求的其余部分.( ...
- linux计划任务(二)
计划任务的授权 1.at任务 /etc/at.allow /etc/at.deny 2.crontab任务 /etc/cron.allow /etc/cron.deny [注:如果allow文件存在, ...
- 8.使用Exists监控ZNode的三大Change事件
一. zookeeper是一个分布式的协调程序(所有程序都是通过订阅它来相互感知) 1. tcp(长链接) + watcher server ->client client ->ser ...
- 如何在Mirth Connect中创建和调用自定义Java代码
0-前言 本文章将向您展示如何创建自定义Java类,将其编译/打包到JAR中,将其包含在Mirth Connect在,并在JavaScript中调用它,您可以从任何JavaScript上下文调用自定义 ...
- linux下文件打包、压缩详解
Linux平台下,有如下几种常见的压缩工具: ========================================================================= 工 具 ...
- wp调用百度服务api
通过百度开放平台申请api成功后,百度会提供一个application key简称ak和一个security key简称sk. 看一下某个服务url的格式 1. url前缀 2. 服务类型 3. 参数 ...
- 二.jenkins构建自动化任务
1,新建任务 打开jinkens, 选择 [新建] -->[输入要构建的项目名称]-->[构建一个自由风格的软件项目]-->[OK] 2, 配置 根据自己的需要选择配置,如下: 代 ...
- 通过hive向写elasticsearch的写如数据
通过hive向写elasticsearch的写如数据 hive 和 elasticsearch 的整合可以参考官方的文档: ES-hadoop的hive整合 : https://www.elastic ...
- elasticsearch不能使用root启动问题解决
问题: es安装好之后,使用root启动会报错:can not run elasticsearch as root [root@iZbp1bb2egi7w0ueys548pZ bin]# ./elas ...
- 大咖分享 | 一文解锁首届云创大会干货——下篇(文末附演讲ppt文件免费下载)
本文承接上一篇:大咖分享 | 一文解锁首届云创大会干货--上篇(文末附演讲ppt文件免费下载),第一届云创大会留下干货太多,这里追加下篇,同样,文末提供大咖们的干货分享,点击附件可免费下载. ...