- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章浅谈SpringMVC中Interceptor和Filter区别由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
interceptor 。
主要作用:拦截用户请求,进行处理,比如判断用户登录情况、权限验证,只要针对controller请求进行处理,是通过handlerinterceptor.
interceptor分两种情况,一种是对会话的拦截,实现spring的handlerinterceptor接口并注册到mvc的拦截队列中,其中prehandle()方法在调用handler之前进行拦截(上图步骤3),posthandle()方法在视图渲染之前调用(上图步骤5),aftercompletion()方法在返回相应之前执行;另一种是对方法的拦截,需要使用@aspect注解,在每次调用指定方法的前、后进行拦截.
filter 。
主要作用:过滤字符编码、做一些业务逻辑判断,主要用于对用户请求进行预处理,同时也可进行逻辑判断.
filter在请求进入servlet容器执行service()方法之前就会经过filter过滤(上图步骤1),不像intreceptor一样依赖于springmvc框架,只需要依赖于servlet。filter启动是随web应用的启动而启动,只需要初始化一次,以后都可以进行拦截.
filter有如下几个种类:
filter和interceptor的区别 。
interceptor 。
配置如下:
1
2
3
4
5
6
7
8
|
<mvc:interceptors>
<bean
class
=
"cn.appsys.testinterceptor"
></bean>
//拦截所有请求
<mvc:interceptor>
<mvc:mapping path=
"/manager/backend/**"
/>
<bean
class
=
"cn.appsys.interceptor.sysinterceptor"
/>
//拦截上面请求
</mvc:interceptor>
</mvc:interceptors>
|
一般拦截器可通过实现handlerinterceptor接口或者继承handlerinterceptoradapter实现。代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
public
class
testinterceptor
implements
handlerinterceptor {
@override
public
boolean
prehandle(httpservletrequest httpservletrequest, httpservletresponse httpservletresponse, object o)
throws
exception {
system.out.println(
"prehandle"
);
return
true
;
}
@override
public
void
posthandle(httpservletrequest httpservletrequest, httpservletresponse httpservletresponse, object o, modelandview modelandview)
throws
exception {
system.out.println(
"posthandle"
);
}
@override
public
void
aftercompletion(httpservletrequest httpservletrequest, httpservletresponse httpservletresponse, object o, exception e)
throws
exception {
system.out.println(
"aftercompletion"
);
}
}
|
prehandle是在请求到达controller之前实现,可进行用户校验登录等操作,返回true后,请求到达controller层;posthandle方法是在执行完controller层代码之后,dispatcherservlet进行视图的渲染之前 。
执行,因此可以对modelandview 对象进行处理;aftercompletion方法是在dispatcherservlet进行视图的渲染之后执行调用,主要是进行一些资源清理等工作.
注:只能对controller请求进行拦截,对一些静态资源无法拦截.
filter 。
主要作用:统一设置字符集等.
依赖于servlet容器,过滤器实例只在初始化的时候调用一次.
过滤器在web.xml配置如下:
1
2
3
4
5
6
7
8
|
<filter>
<filter-name>testfilter</filter-name>
<filter-
class
>cn.appsys.testfilter</filter-
class
>
</filter>
<filter-mapping>
<filter-name>testfilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
|
一般过滤器可通过实现filter接口实现。代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
public
class
testfilter
implements
filter {
@override
public
void
destroy() {
system.out.println(
"filter destroy"
);
}
@override
public
void
dofilter(servletrequest arg0, servletresponse arg1, filterchain arg2)
throws
ioexception, servletexception {
system.out.println(
"filter dofilter before"
);
arg2.dofilter(arg0, arg1);
system.out.println(
"filter dofilter after"
);
}
@override
public
void
init(filterconfig arg0)
throws
servletexception {
system.out.println(
"filter init"
);
}
}
|
拦截器和过滤器执行顺序:
1、filter.init(); 2、filter.dofilter(); before dofilter 3、handlerinterceptor.prehandle(); 4、controller方法执行 5、handlerinterceptor.posthandle(); 6、dispatcherservlet视图渲染 7、handlerinterceptor.aftercompletion(); 8、filter.dofilter(); after dofilter 9、filter.destroy(),
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.
最后此篇关于浅谈SpringMVC中Interceptor和Filter区别的文章就讲到这里了,如果你想了解更多关于浅谈SpringMVC中Interceptor和Filter区别的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我正在执行命令 ng g interceptor error 其中错误是拦截器的名称 但面临如下问题: An unhandled exception occurred: Schematic "inte
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本文是《quarkus依赖注入》系列的第五篇
我在每个 Controller 代码(例如@UseInterceptors(ClassSerializerInterceptor))中都使用了,所以我决定将其设置为全局,并且尝试设置它时不走运。 我在
应用程序开发语言:ionic + Restangular 我在 Restangular 中有一个用于 BaseUrl 和 Auth Interceptor 的全局配置。[就像 http://app 一
在我的服务类中,我需要可用的 hibernate session 。我目前在 beans.xml 中这样做: com.app.dao.UserDao
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码): https://github.com/zq2599/blog_demos 本篇概览 本
mybatis采用责任链模式,通过动态代理组织多个拦截器(插件),通过这些拦截器可以改变mybatis的默认行为(诸如sql重写之类的),由于插件会深入到mybatis的核心,因此在编写自己的插件前
下面给大家介绍mybatis interceptor 处理查询参数及查询结果,具体代码如下所示: ?
我一直在尝试实现应用程序范围的拦截器,但是,我一直看到以下错误: TypeError: this.interceptor.intercept is not a function 经过多次调试,我意识到
我有一个 HTTP 拦截器。后端 API 需要自定义 header ,其值在应用初始化和其他操作期间存储在 indexdb 中。因此,我需要获取值并在每个请求中传递它。但到目前为止,未能这样做,因为拦
我的 HibernateInterceptor 有问题。我延长了 EmptyInterceptor并覆盖 onFlushDirty方法。 我使用这种方法手动检查脏值(将以前的值与当前值进行比较)来为更
我在 Angular 5 中有一个有效的拦截器。它在 App.module 的提供者中注册,并正确拦截了从应用程序发出的所有请求。 问题是它不会拦截从应用程序使用的库发出的请求。 我正在使用开源库 (
我们已经实现了以下内容 function Inteceptors($httpProvider) { 'ng-inject'; $httpProvider.interceptors.pu
我需要拦截请求/响应,类似于 java 过滤器中的处理方式。在 Django 中执行此操作的最佳方法是什么?我只是要创建自己的中间件还是已经存在其他东西? 最佳答案 如果您需要拦截客户端请求/响应,请
目前,我们在 Jboss EAP 6.2 上使用 CXF 2.7.3 时遇到问题,并出现自定义 SoapFault 异常。 当我们发送自定义 SoapFault 时,不会显示子代码及其值: 这是我们想
CDI 中拦截器的范围是什么? aka,这合法吗?我会在每个调用拦截器的地方获得相同的拦截器实例吗? @RequestScoped public class SalesForceControllerI
我正在构建一个有 2 个拦截器的 angular 5 应用程序: 重试失败的 504 请求 另一个向用户显示有关失败请求的错误消息 我希望仅当错误不是 504 或错误为 504 并且已被第一个拦截器重
利用Spring MVC 的 Interceptor 实现个简易的性能监控,计算一下每个url的执行时间。 在 preHandle 方法中记录当前的时间戳到线程局部变量里,然后在afterComp
我想知道是否有办法在 Angular 的 HttpInterceptor 中检索当前路由。我正在使用来自不同路由的相同拦截器,但我需要检查是否正在从特定路由使用拦截器。如果是这样,我想在执行之前向后端
我创建了一个简单的拦截器来将用户重定向到登录页面,服务器返回 401 错误。但是它不起作用,因为状态被设置为 404,所以 $location 永远不会被调用。 .config( function m
我是一名优秀的程序员,十分优秀!