(十五)springMvc 拦截器
定义拦截器
springMvc
中定义拦截器只需要实现一个接口 org.springframework.web.servlet.HandlerInterceptor
;
public class Myfilter implements HandlerInterceptor {
...
}
接口中三个方法
/**
在执行 handler 之前,执行 进,进行拦截;
方法返回 true ,则放行;返回false,则拦截 ;
用途:身份认证,权限管理
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
return false;
}
/**
在执行handler之后,且在返回 modelAndView 之前执行
用途:为 modelAndView 填充一些统一的数据
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
/**
在执行完 handler 之后(注意是执行完,不是执行),执行 ;
用途: 进行统一的异常处理 ;
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
配置拦截器
springMvc
的拦截器是针对 HandlerMapping
的,也就是一个 拦截器,对应一个 映射器 ,哪个映射器配置了拦截器,那么只有经过该拦截器映射成功的 handler
才会被拦截 ;;
但是,也可以配置一个 类似 于全局的拦截器,利用 springMvc
将一个拦截器,注入到每一个 映射器 中,就可以完成类似全局拦截器 ;
配置单个映射器的拦截器
在
springMvc.xml
中进行配置 ;
<!--自定义拦截器-->
<bean class="xin.ijava.ssm.filter.Myfilter" id="myfilter" /> <!--配置单个拦截器-->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
<property name="interceptors">
<list>
<ref bean="myfilter"/>
</list>
</property>
</bean>
配置类似全局的拦截器
可以配置多了拦截器,类似于拦截链的样子,拦截顺序按照定义的顺序!
<!--配置类似全局的拦截器-->
<mvc:interceptors>
<!--可以配置多个拦截器。按照配置的顺序进行拦截-->
<mvc:interceptor>
<!--配置拦截的url , ** 代表拦截所有,包括子目录-->
<mvc:mapping path="/**"/>
<bean class="xin.ijava.ssm.filter.Myfilter"/>
</mvc:interceptor> <!--再配置一个拦截器-->
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="xin.ijava.ssm.filter.Myfilter1"/>
</mvc:interceptor>
</mvc:interceptors>
多个拦截器的规则
这里以 2
个拦截器为例子 ,A,B 两个拦截器,A是第一个,B是第二个;
A、B 都放行
preHandle
按照拦截器的定义 顺序执行,后两个方法postHandle
,afterCompletion
,按照拦截器的定义顺序 逆序执行 ;A放行,B不放行
preHandle
方法总是会执行,因为在里面进行判断是否放行 ;A拦截器放行,才会执行B拦截器,加强A 没有放行,那么后面的拦截器都不会得到执行;
只要有一个拦截器不放行,那么所有的拦截器的
postHandle
都不会得到执行 ,但是其他放行的拦截器的afterCompletion
会得到执行 ;A,B都不放行
preHandle
方法总是会执行,因为在里面进行判断是否放行 ;由于A 没有放行,那么A后面的拦截器都不会得到执行了 ,就像一个链子一样,在此断掉了(拦截链);
综合所述,对于统一日志的处理,要放在第一位,并其要放行 ;
(十五)springMvc 拦截器的更多相关文章
- 五 : springMVC拦截器
springMVC拦截器的实现一般有两种方式 第一种方式是要定义的Interceptor类要实现了Spring的HandlerInterceptor 接口 第二种方式是继承实现了HandlerInte ...
- Spring+SpringMVC+MyBatis深入学习及搭建(十七)——SpringMVC拦截器
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7098753.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(十六)--S ...
- 使用Typescript重构axios(十四)——实现拦截器
0. 系列文章 1.使用Typescript重构axios(一)--写在最前面 2.使用Typescript重构axios(二)--项目起手,跑通流程 3.使用Typescript重构axios(三) ...
- SpringMVC拦截器的使用
SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那 ...
- SpringMVC拦截器详解[附带源码分析]
目录 前言 重要接口及类介绍 源码分析 拦截器的配置 编写自定义的拦截器 总结 总结 前言 SpringMVC是目前主流的Web MVC框架之一. 如果有同学对它不熟悉,那么请参考它的入门blog:h ...
- SpringMVC拦截器2(资源和权限管理)(作为补充说明)
SpringMVC拦截器(资源和权限管理) 1.DispatcherServlet SpringMVC具有统一的入口DispatcherServlet,所有的请求都通过DispatcherServle ...
- SpringMVC拦截器(实现登录验证拦截器)
本例实现登陆时的验证拦截,采用SpringMVC拦截器来实现 当用户点击到网站主页时要进行拦截,用户登录了才能进入网站主页,否则进入登陆页面 核心代码 首先是index.jsp,显示链接 <%@ ...
- 初学 Python(十五)——装饰器
初学 Python(十五)--装饰器 初学 Python,主要整理一些学习到的知识点,这次是生成器. #-*- coding:utf-8 -*- import functools def curren ...
- SpringMVC拦截器Interceptor
SpringMVC拦截器(Interceptor)实现对每一个请求处理前后进行相关的业务处理,类似与servlet中的Filter. SpringMVC 中的Interceptor 拦截请求是通过Ha ...
- 基于SpringMVC拦截器和注解实现controller中访问权限控制
SpringMVC的拦截器HandlerInterceptorAdapter对应提供了三个preHandle,postHandle,afterCompletion方法. preHandle在业务处理器 ...
随机推荐
- alarm函数
alarm函数 设置定时器(闹钟).在指定seconds后,内核会给当前进程发送14)SIGALRM信号.进程收到该信号,默认动作终止. 每个进程都有且只有唯一个定时器. unsigned int a ...
- Linux之创建多个子进程
/*** fork_test.c ***/ #include<stdio.h> #include<stdlib.h> #include<unistd.h> int ...
- centos7安装gitlab 支持带认证https,开启邮件功能 超级简单.
官方安装说明:https://about.gitlab.com/install/#centos-7 自定义yum源 自行搞定 下载gitlab 官方安装: curl -s https://packag ...
- 自动化测试报告浅谈之ExtentReports
我们在进行自动化测试时,往往需要有相应的测试报告,比如junit,testng,reportng等等,有会有自带的测试报告,那为什么我要在这边提ExtentReports?首先,我们来看看其它几种测试 ...
- Ubuntu14.04 支持 exFat 格式操作
推荐u盘使用exfat格式,为什么呢?两个原因: 1.三大主流操作系统(Linux.Mac.Windows)都支持exfat格式.2.exfat支持大于4G的文件. 在ubuntu下,由于版权的原因( ...
- JDK8 新特性 Lambda表达式
1.java8中Lambda表达式基础语法: (x,y) -> {} 左侧是一个小括号,里面是要实现的抽象方法的参数,有几个参数就写几个参数名,无参可写空括号,无需声明参数类型: 中间是一个jd ...
- VMware下的CentOS7在桥接模式下,设置静态ip联网
之前在虚拟机下联网都用的是NAT模式,但现在做一个项目需要实现在两台笔记本电脑中的VMware虚拟机中的CentOS联网, 从网上查资料显示比较常规的方式是桥接模式.第一次用桥接模式联网,在网上查了很 ...
- Swift 基本语法
如果创建的是 OS X playground 需要引入 Cocoa : import Cocoa /* 我的第一个 Swift 程序 */ var myString = "Hello, Wo ...
- 在Win7下玩PC游戏发生类似d3d9x_43.dll找不到的情况
由于d3d9x属于DirectX9.0c扩展,默认不会随系统安装.因此要快速修复这个问题可以去微软官网下载D3D驱动补丁. http://www.microsoft.com/zh-cn/downloa ...
- C#与C++数据类型比较及结构体转换(搜集整理二)
原文网址:http://www.blogjava.net/heting/archive/2010/03/20/315998.html C++ C# ========================== ...