拦截器 和过滤器

https://blog.csdn.net/zxd1435513775/article/details/80556034

 

 

拦截器(Interceptor)和过滤器(Filter)的执行顺序和区别

2018年06月03日 13:31:00 止步前行 阅读数:2871 标签: FilterInterceptorController执行顺序收起

个人分类: code框架

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zxd1435513775/article/details/80556034

一、引言


本来想记录一下关于用户登陆和登陆之后的权限管理、菜单管理的问题,想到解决这个问题用到Interceptor,但想到了Interceptor,就想到了Filter,于是就想说一下它们的执行顺序和区别。关于Interceptor解决权限和菜单管理的问题,在放在下一篇写吧,就酱紫。

二、区别


1、过滤器(Filter)

首先说一下Filter的使用地方,我们在配置web.xml时,总会配置下面一段设置字符编码,不然会导致乱码问题:

 <filter><filter-name>encoding</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><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-mapping><filter-name>encoding</filter-name><servlet-name>/*</servlet-name>
</filter-mapping>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

配置这个地方的目的,是让所有的请求都需要进行字符编码的设置,下面来介绍一下Filter。

(1)过滤器(Filter):它依赖于servlet容器。在实现上,基于函数回调,它可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容器初始化时调用一次。使用过滤器的目的,是用来做一些过滤操作,获取我们想要获取的数据,比如:在Javaweb中,对传入的request、response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者Controller进行业务逻辑操作。通常用的场景是:在过滤器中修改字符编码(CharacterEncodingFilter)、在过滤器中修改HttpServletRequest的一些参数(XSSFilter(自定义过滤器)),如:过滤低俗文字、危险字符等。

2、拦截器(Interceptor)


拦截器的配置一般在SpringMVC的配置文件中,使用Interceptors标签,具体配置如下:

<mvc:interceptors><mvc:interceptor><mvc:mapping path="/**" /><bean class="com.scorpios.atcrowdfunding.web.LoginInterceptor"></bean></mvc:interceptor><mvc:interceptor><mvc:mapping path="/**" /><bean class="com.scorpios.atcrowdfunding.web.AuthInterceptor"></bean></mvc:interceptor>
</mvc:interceptors>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

(2)拦截器(Interceptor):它依赖于web框架,在SpringMVC中就是依赖于SpringMVC框架。在实现上,基于Java的反射机制,属于面向切面编程(AOP)的一种运用,就是在service或者一个方法前,调用一个方法,或者在方法后,调用一个方法,比如动态代理就是拦截器的简单实现,在调用方法前打印出字符串(或者做其它业务逻辑的操作),也可以在调用方法后打印出字符串,甚至在抛出异常的时候做业务逻辑的操作。由于拦截器是基于web框架的调用,因此可以使用Spring的依赖注入(DI)进行一些业务操作,同时一个拦截器实例在一个controller生命周期之内可以多次调用。但是缺点是只能对controller请求进行拦截,对其他的一些比如直接访问静态资源的请求则没办法进行拦截处理。

三、代码

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

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

相关文章

解析HTTP协议六种请求方法,get,head,put,delete,post有什么区别

转载自 解析HTTP协议六种请求方法,get,head,put,delete,post有什么区别 标准Http协议支持六种请求方法&#xff0c;即&#xff1a; 1、GET 2、POST 3、PUT 4、Delete 5、HEAD 6、Options 但其实我们大部分情况下只用到了GET和POST。如果想设计一个符合RESTful规范的web…

攻城掠地端mysql_【图片】攻城掠地单机版本服务端+攻城掠地GM工具【单兆权吧】_百度贴吧...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼player_wepon 兵器 宝石修改&#xff0e;1&#xff0c;为1级宝石  1001&#xff0c;1级晶石修改最好手动修改&#xff0c;手自进阶  最多改六个一多出错player_tickets  点卷改修activity    活动表store_house  背包表p…

同步和异步有何异同,什么场景使用

同步和异步有何异同&#xff0c;什么场景使用&#xff0c;举例说明&#xff01; 2016年11月30日 18:47:26 qq_36179561 阅读数&#xff1a;1752更多 个人分类&#xff1a; 基础知识 同步:发送一个请求,等待返回,然后再发送下一个请求 异步:发送一个请求,不等待返回,随时可以…

面试经历---YY欢聚时代

转载自 面试经历---YY欢聚时代&#xff08;2015年11月21日上午初试、25日下午复试&#xff09;YY欢聚时代一年多前去面试过一次&#xff0c;当时鄙视了&#xff0c;在现在的公司呆了1年半了&#xff0c;感觉做得很不爽&#xff0c;而且薪资又不满意&#xff0c;所以想找个新工…

走进异步编程的世界 - 开始接触 async/await

序 这是学习异步编程的入门篇。 涉及 C# 5.0 引入的 async/await&#xff0c;但在控制台输出示例时经常会采用 C# 6.0 的 $"" 来拼接字符串&#xff0c;相当于string.Format() 方法。 目录 Whats 异步&#xff1f;async/await 结构What’s 异步方法&#xff1f; 一、…

所有的软弱,都是昂贵的

作者&#xff1a;周冲 来源&#xff1a;周冲的影像声色&#xff08;fuck_your_dick&#xff09; 01 契诃夫有一个小说&#xff0c;名叫《柔弱的人》&#xff0c;讲一个主人&#xff0c;巧立名目&#xff0c;剥夺家庭教师的工资。 首先&#xff0c;他压缩掉她的周末&#xff0c…

python3中urlopen_解决python3 urllib中urlopen报错的问题

前言最近更新了Python版本&#xff0c;准备写个爬虫&#xff0c;意外的发现urllib库中属性不存在urlopen&#xff0c;于是各种google&#xff0c;然后总结一下给出解决方案问题的出现AttributeError: module object has no attribute urlopen问题的解决途径我们先来看下官方文档…

100+经典Java面试题及答案解析

转载自 100经典Java面试题及答案解析面向对象编程&#xff08;OOP&#xff09;Java是一个支持并发、基于类和面向对象的计算机编程语言。下面列出了面向对象软件开发的优点&#xff1a; 代码开发模块化&#xff0c;更易维护和修改。代码复用。增强代码的可靠性和灵活性。增加代…

.NET HttpClient的缺陷和文档错误让开发人员倍感沮丧

设计错误、缺陷及文档错误等导致正确使用.NET HttpClient变得出奇地困难。所以&#xff0c;即使是生产环境中看似运行正常的应用程序&#xff0c;在负荷不满的情况下&#xff0c;也遭受着性能问题和运行时故障。 来自ASP.NET Monsters的Simon Timms就通过一篇题为“你正在错误地…

python监听剪贴板_Python监听剪切板实现方法代码实例

第一种import win32clipboardimport time#速度快 容易出错class niubi():def lihai(self):while True:#jianting().main()t jianting().main()print(t)class jianting():def clipboard_get(self):"""获取剪贴板数据"""win32clipboard.OpenClipb…

新闻发布项目——业务逻辑层(UserService)

package bdqn.newsManageServlet.Service;import bdqn.newsManageServlet.entity.User;/*** 用户信息* author Administrator**/ public interface UserService {public User getLoginUser(String uName,String pwd, String msg);}

二叉树总结挺好的很好记忆

https://blog.csdn.net/fightforyourdream/article/details/16843303 面试大总结之二&#xff1a;Java搞定面试中的二叉树题目 2013年11月20日 14:04:27 chiiis 阅读数&#xff1a;25438更多 个人分类&#xff1a; AlgorithmInterview 这是本系列的第二篇&#xff0c;与前一…

免费开源分布式系统日志收集框架 Exceptionless

前言 从去年就答应过Eric&#xff08;Exceptionless的作者之一&#xff09;&#xff0c;在中国会帮助给 Exceptionless 做推广&#xff0c;但是由于各种原因一直没有做这件事情&#xff0c;在此对Eric表示歉意。:) Exceptionless 简介 Exceptionless 是一个开源的实时的日志收集…

如何安装mysql5.5.6_centos6安装mysql5.5.53

MysqL官网下载MysqL的red hat linux安装包下载地址为&#xff1a;http://dev.MysqL.com/downloads/MysqL/5.5.html#downloads下载后的文件为&#xff1a;MysqL-5.5.53-1.el7.x86_64.rpm-bundle.tar解压 tar 包 &#xff1a;tar -xvf MysqL-5.5.53-1.el7.x86_64.rpm-bundle.tar移…

java职业规划

百度搜索java职业规划好多啊啊啊

避免同步死锁

翻译自 避免同步死锁在我之前的文章“ Double-Checked Locking&#xff1a;Clever&#xff0c;but Broken ”&#xff08;JavaWorld&#xff0c;2001年2月&#xff09;&#xff0c;我描述了几种常用的避免同步的技术实际上是不安全的&#xff0c;并建议了一个“如有疑问&#…

程序员小测试:保守派 vs 自由派

最近&#xff0c;我在阅读 Steve Yegg 的文集《程序员的呐喊》。 这是一本非常有趣的书&#xff0c;里面甚至包含了一个小测试&#xff08;原文&#xff09;&#xff0c;区分一个程序员到底是保守派还是自由派。 下面一共有十个问题&#xff0c;每个问题都有 A 和 B 两个选项&a…

新闻发布项目——业务逻辑层(newsTbService)

package bdqn.newsManageServlet.Service;import java.util.List;import bdqn.newsManageServlet.entity.newsTb;/*** 新闻业务逻辑层的接口* author Administrator**/ public interface newsTbService {//分页查询public List<newsTb>getPagingNews(int pagesize,int pa…

django mysql 创建表_关于 django ORM 中,数据库建表方式的问题

本人以前是做客户端的&#xff0c;做后端没多久。一直有一个问题困扰我&#xff0c;正好现在手上有一个系统在做。系统逻辑是写一个爬虫在网上爬取一个网站的信息&#xff0c;经过加工处理后&#xff0c;使用 django 来展示和交互。表结构简化为三张表A:爬虫爬取得到的信息B:数…

遍历多叉树

https://www.jianshu.com/p/dee8284b2dc4 beg4 关注 2018.03.22 15:14* 字数 334 阅读 172评论 0喜欢 1 随便画一个树,写代码遍历它 OK,树的结构这么描述 public class TreeNode {private String name;private TreeNode parent;private List<TreeNode> children new …