SpringMvc的过滤器。

一:过滤器的原理:

过滤器放在web资源之前,可以在请求抵达它所应用的web资源(可以是一个Servlet、一个Jsp页面,甚至是一个HTML页面)之前截获进入的请求,并且在它返回到客户之前截获输出请求。

Filter:用来拦截请求,处于客户端与被请求资源之间,目的是重用代码。Filter链,在web.xml中哪个先配置,哪个就先调用。在filter中也可以配置一些初始化参数。

Java中的Filter 并不是一个标准的Servlet ,它不能处理用户请求,也不能对客户端生成响应。 主要用于对HttpServletRequest 进行预处理,也可以对HttpServletResponse 进行后处理,是个典型的处理链。

二:Filter 有如下几个种类:

l  用户授权的Filter: Filter 负责检查用户请求,根据请求过滤用户非法请求。

l  日志Filter: 详细记录某些特殊的用户请求。

l  负责解码的Filter: 包括对非标准编码的请求解码。

l  能改变XML 内容的XSLTFilter 等。

三:Filter 有如下几个用处

l  在HttpServletRequest 到达Servlet 之前,拦截客户的HttpServletRequest 。

l  根据需要检查HttpServletRequest ,也可以修改HttpServletRequest 头和数据。

l  在HttpServletResponse 到达客户端之前,拦截HttpServletResponse 。

l  根据需要检查HttpServletResponse ,可以修改HttpServletResponse 头和数据。

四:创建一个Filter 只需两个步骤: 
(1)创建Filter 处理类:

(2)在web.xml 文件中配置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元素驱动。

参照编码过滤器示例来查看怎么实现的

  1. 首先配置在web.xml文件里的规则如下:

     1 <!-- 编码处理过滤器 -->
     2
     3    <filter>
     4
     5       <filter-name>encodingFilter</filter-name>
     6
     7       <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
     8
     9       <init-param>
    10
    11          <param-name>encoding</param-name>
    12
    13          <param-value>utf-8</param-value>
    14
    15       </init-param>
    16
    17       <init-param>
    18
    19          <param-name>forceEncoding</param-name>
    20
    21          <param-value>true</param-value>
    22
    23       </init-param>
    24
    25     </filter>
    26
    27
    28
    29     <filter-mapping>
    30
    31        <filter-name>encodingFilter</filter-name>
    32
    33        <url-pattern>*.do</url-pattern>
    34
    35     </filter-mapping>

    其中,filter-class 为过滤器Filter类,init-prama为注入的set参数

    Filter-mapping中的url-pattern为过滤的url类型

  2. 设置编码的核心代码为
  3.  1 @Override
     2
     3    protected void doFilterInternal(
     4
     5          HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
     6
     7          throws ServletException, IOException {
     8
     9
    10
    11       if (this.encoding != null && (this.forceEncoding || request.getCharacterEncoding() == null)) {
    12
    13          request.setCharacterEncoding(this.encoding);
    14
    15          if (this.forceEncoding) {
    16
    17             response.setCharacterEncoding(this.encoding);
    18
    19          }
    20
    21       }
    22
    23       filterChain.doFilter(request, response);
    24
    25    }

    其中filterChain为过滤器链,表示执行完这个过滤器之后接着执行下一个过滤器

过滤器的运行是依赖于servlet容器的。所以配置在web.xml中。

拦截器是springmvc框架的。所以要配置在springmvc.xml文件中。

原文地址:https://www.cnblogs.com/bulrush/p/8677689.html

时间: 2024-10-11 08:26:42

SpringMvc的过滤器。的相关文章

springmvc权限过滤器

package com.zbb.cn.filter; import java.io.PrintWriter; import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelA

spring mvc 第一天【注解实现springmvc的基本配置】

创建pojo,添加标识类的注解@Controller,亦可添加该Handler的命名空间:设置类的@RequestMapping(value="/hr") 该类中的方法(Handler)的标识使用@RequestMapping来配置 .可以设置该Handler的请求路径,和允许接收请求类型信息等: 该Handler返回String类型的逻辑视图名称.对应view视图信息. 1 @Controller 2 @RequestMapping 3 public class MyControll

spring中的web上下文,spring上下文,springmvc上下文区别(超详细)

web上下文(Servlet context),spring上下文(WebApplication Context),springmvc上下文(mlWebApplicationCont)之间区别. 上下文:可以简单的理解为容器,配置文件 web上下文目标对象是所有web应用,spring上下文目标对象是单个web应用,spring mvc目标对象是单个web应用的spring mvc框架(是spring上下文的子上下文,即继承自spring上下文,所以子能够调用父的东西,反之,不可). 以上感觉自

spring的权限控制,过滤器

spring的过滤器可以实现登录状态问题 1.创建一个AccessFilter类,基础代码 package com.ujia.util.access; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerInterceptor; import org.springframe

开始学SpringMVC之Request方式

本文主要以一些简单的小例子,简述在SpringMVC开发过程中,经常用到的Request方面的内容,仅供学习分享使用,如有不足之处,还请指正. 概述 在客户机和服务器之间进行请求-响应时,两种最常被用到的方法是:GET 和 POST.如果要支持其他方式进行访问,则必须在表单中增加Hidden元素,然后再SpringMVC中过滤器进行拦截,再重新封装请求方式. Request常见访问方式 GET - 从指定的资源请求数据. POST - 向指定的资源提交要被处理的数据 GET方式 访问的特点: G

基于angularJs的单页面应用seo优化及可抓取方案原理分析

公司使用angularJs(以下都是指ng1)框架做了互联网应用,之前没接触过seo,突然一天运营那边传来任务:要给网站做搜索引擎优化,需要研发支持.搜了下发现单页面应用做seo比较费劲,国内相关实践资料分享出来的也比较少,略懵,前后花了一番功夫总算完成了.在这里记录下来,做一个总结,也希望能够帮助在做类似工作的朋友少走一点弯路.还是建议需要seo的网站技术选型尽量不要使用angular react一类的单页面框架.如果你和我一样网站做完了发现需要seo,那么往下看吧.如果各位已有更优的方案欢迎

【SpringBoot】1.SpringBoot介绍

一.SpringBoot产生的契机我们知道,搭建一个Spring+Struts+Hibernate(SSH)架构或Spring+SpringMVC+MyBatis(SSM)架构的应用,基本上都需要以下步骤:(1)配置Maven依赖(2)配置数据库properties配置文件,日志properties文件(3)配置Spring核心类加载文件bean.xml,其中会配置:    a.properties配置引入    b.包扫描    c.数据源(数据库连接池)    d.数据库会话工厂    e.

SSM+Redis+Shiro+Maven框架搭建及集成应用

引文: 本文主要讲述项目框架搭建时的一些简单的使用配置,教你如何快速进行项目框架搭建. 技术: Spring+SpringMVC+Mybatis+Redis+Shiro+Maven            mybatis.redis都是使用spring集成 技术介绍就不再讲述了,话不多说,急忙上代码了. 1.新建Web项目使用Maven 进行项目管理 具体步骤不进行讲述.... 主要配置 web.xml 文件 1 <?xml version="1.0" encoding="

请求参数的绑定 请求参数乱码问题

绑定的机制 表单中请求参数都是基于 key=value 的 SpringMVC 绑定请求参数的过程是通过   把表单提交请求参数,作为控制器中方法参数   进行绑定的 例如: <a href="account/findAccount?accountId=10">查询账户</a> 中请求参数是:   accountId=10 /** * 查询账户 * @return */ @RequestMapping("/findAccount") publ