springMVC教程--拦截器详解
3 拦截器
3.1 定义
Spring Web MVC 的处理器拦截器类似于Servlet 开发中的过滤器Filter,用于对处理器进行预处理和后处理。
3.2 拦截器定义
实现HandlerInterceptor接口,如下:
Public class HandlerInterceptor1 implements HandlerInterceptor{/*** controller执行前调用此方法* 返回true表示继续执行,返回false中止执行* 这里可以加入登录校验、权限拦截等*/@OverridePublic boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception {// TODO Auto-generated method stubReturn false;}/*** controller执行后但未返回视图前调用此方法* 这里可在返回用户前对模型数据进行加工处理,比如这里加入公用信息以便页面显示*/@OverridePublic void postHandle(HttpServletRequest request,HttpServletResponse response, Object handler,ModelAndView modelAndView) throws Exception {// TODO Auto-generated method stub}/*** controller执行后且视图返回后调用此方法* 这里可得到执行controller时的异常信息* 这里可记录操作日志,资源清理等*/@OverridePublic void afterCompletion(HttpServletRequest request,HttpServletResponse response, Object handler, Exception ex)throws Exception {// TODO Auto-generated method stub}}
3.3 拦截器配置
3.3.1 针对某种mapping配置拦截器
<beanclass="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"><property name="interceptors"><list><ref bean="handlerInterceptor1"/><ref bean="handlerInterceptor2"/></list></property></bean><bean id="handlerInterceptor1" class="springmvc.intercapter.HandlerInterceptor1"/><bean id="handlerInterceptor2" class="springmvc.intercapter.HandlerInterceptor2"/>
3.3.2 针对所有mapping配置全局拦截器
<!--拦截器 --><mvc:interceptors><!--多个拦截器,顺序执行 --><mvc:interceptor><mvc:mapping path="/**"/><bean class="com.sihai.springmvc.filter.HandlerInterceptor1"></bean></mvc:interceptor><mvc:interceptor><mvc:mapping path="/**"/><bean class="com.sihai.springmvc.filter.HandlerInterceptor2"></bean></mvc:interceptor></mvc:interceptors>
3.4 正常流程测试
3.4.1 代码:
定义两个拦截器分别为:HandlerInterceptor1和HandlerInteptor2,每个拦截器的preHandler方法都返回true。
3.4.2 运行流程
HandlerInterceptor1..preHandle..
HandlerInterceptor2..preHandle..
HandlerInterceptor2..postHandle..
HandlerInterceptor1..postHandle..
HandlerInterceptor2..afterCompletion..
HandlerInterceptor1..afterCompletion..
3.5 中断流程测试
3.5.1 代码:
定义两个拦截器分别为:HandlerInterceptor1和HandlerInteptor2。
3.5.2 运行流程
HandlerInterceptor1的preHandler方法返回false,HandlerInterceptor2返回true,运行流程如下:
HandlerInterceptor1..preHandle..
从日志看出第一个拦截器的preHandler方法返回false后第一个拦截器只执行了preHandler方法,其它两个方法没有执行,第二个拦截器的所有方法不执行,且controller也不执行了。
HandlerInterceptor1的preHandler方法返回true,HandlerInterceptor2返回false,运行流程如下:
HandlerInterceptor1..preHandle..
HandlerInterceptor2..preHandle..
HandlerInterceptor1..afterCompletion..
从日志看出第二个拦截器的preHandler方法返回false后第一个拦截器的postHandler没有执行,第二个拦截器的postHandler和afterCompletion没有执行,且controller也不执行了。
总结:
preHandle按拦截器定义顺序调用
postHandler按拦截器定义逆序调用
afterCompletion按拦截器定义逆序调用
postHandler在拦截器链内所有拦截器返成功调用
afterCompletion只有preHandle返回true才调用
3.6 拦截器应用
3.6.1 用户身份认证
Public class LoginInterceptorimplements HandlerInterceptor{@OverridePublic boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler)throws Exception {//如果是登录页面则放行if(request.getRequestURI().indexOf("login.action")>=0){return true;}HttpSession session = request.getSession();//如果用户已登录也放行if(session.getAttribute("user")!=null){return true;}//用户没有登录挑战到登录页面request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response);return false;}}
3.6.2 用户登陆controller
//登陆页面@RequestMapping("/login")public String login(Model model)throws Exception{return "login";}//登陆提交//userid:用户账号,pwd:密码@RequestMapping("/loginsubmit")public String loginsubmit(HttpSession session,String userid,String pwd)throws Exception{//向session记录用户身份信息session.setAttribute("activeUser", userid);return "redirect:item/queryItem.action";}//退出@RequestMapping("/logout")public String logout(HttpSession session)throws Exception{//session过期session.invalidate();return "redirect:item/queryItem.action";}
springMVC教程--拦截器详解相关推荐
- SpringMVC拦截器详解
SpringMVC之拦截器 拦截器概述 1.1什么是拦截器(HandleUbterceper) 拦截器可以在目标方法执行之前进行一些拦截工作,或者在目标方法执行过后进行一些操作.在javaWeb的学习 ...
- 第五章 处理器拦截器详解——跟着开涛学SpringMVC
5.1.处理器拦截器简介 Spring Web MVC的处理器拦截器(如无特殊说明,下文所说的拦截器即处理器拦截器)类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理. ...
- 第五章 处理器拦截器详解
5.1.处理器拦截器简介 Spring Web MVC的处理器拦截器(如无特殊说明,下文所说的拦截器即处理器拦截器) 类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理. ...
- structs2拦截器详解
Struts2(XWork)提供的拦截器的功能说明: 拦截器 名字 说明 Alias Interceptor alias 在不同请求之间将请求参数在不同名字件转换,请求内容不变 Chaining In ...
- 一文贯通→过滤器与拦截器详解
一.过滤器Filter 过滤器英文叫 Filter,是 JavaEE 的标准,依赖于 Servlet 容器,可以按照指定顺序配置多个.常用来配置请求编码以及过滤一些非法参数,垃圾信息或者是网站登录验证 ...
- java参数action_Struts2之Action接收请求参数和拦截器详解
技术分析之在Struts2框架中使用Servlet的API 1. 在Action类中也可以获取到Servlet一些常用的API 需求:提供JSP的表单页面的数据,在Action中使用Servlet的A ...
- struts2 18拦截器详解(五)
I18nInterceptor 该拦截器处理defaultStack第四的位置,是用来方便国际化的,如果说我们的一个Web项目要支持国际化的话,通常的做法是给定一个下拉框列出所支持的语言,当用户选择了 ...
- AspectCore动态代理中的拦截器详解(一)
前言 在上一篇文章使用AspectCore动态代理中,简单说明了AspectCore.DynamicProxy的使用方式,由于介绍的比较浅显,也有不少同学留言询问拦截器的配置,那么在这篇文章中,我们来 ...
- 过滤器和拦截器详解
过滤器 和 拦截器的 6个区别,别再傻傻分不清了_程序员小富的博客-CSDN博客_过滤器和拦截器 若依登陆过程及过滤器拦截器的使用: 用户登陆接口:1.把用户信息通过uuid即token作为key,存 ...
最新文章
- 面经:为了拿到字节跳动offer,鬼知道我经历了啥...
- R语言可视化包ggplot2绘制分组的条形图(bar plot、柱状图)实战:多变量柱状图
- 04 javascirpt基础知识---听课笔记
- iOS之深入解析预乘透明度Premultiplied Alpha
- Cognos 10.1 饼图百分比小数点显示的问题
- 小程序和android联调,小程序打开APP指定页面
- mysql 查询列表是否关注_点赞功能,用mysql还是redis?
- EasyUI加zTree使用解析 easyui修改操作的表单回显方法 验证框提交表单前验证 datagrid的load方法...
- android逐帧播放器,Kinovea(逐帧播放器)
- windows计算机日志时间id6008,windows错误事件id6008修复方法
- 思科网络实验3.5.3 vlan配置故障排除
- 转:学会正念沟通,领导力再也不是玄学
- TcaplusDB X 黎明觉醒,探索不止,黎明将至
- 玩转Linux与运维岗(21)
- 360怎样修改wifi服务器,360路由器怎么设置无线网络
- 6-5 奇数值结点链表 (20分)
- 触动千亿电商市场 BitCherry星耀雅加达
- 【十一】消息中间件选型分析——从Kafka与RabbitMQ的对比来看全局
- 用Java实现递归与分治系列(二)
- Koa2仿知乎服务端项目:Webpack配置
热门文章
- 二十、 二叉树的同构
- 计算机区块链的杂志,计算机类 | SPE诚邀区块链专刊(CCF B类,IF:1.338)
- c++新特性11 (10)shared_ptr一”概述“
- C++ Primer 5th笔记(chap 19 特殊工具与技术)运行时类型识別RTTI
- Bech32编码 (1)产生背景
- PKI/CA (1)为什么要有PKI/CA体系?
- 【Flask项目2】创建模型类映射到数据库,密码加密实现(3)
- python基础-引用赋值与按值赋值
- 写博客必备的复制黏贴
- Git 工作区、暂存区和版本库