SpringMVC中拦截器的使用
什么是拦截器
拦截器通常一般指的是通过拦截从浏览器发往服务器的一些请求来完成某些功能的一段程序代码
一般在一个请求发生之前,发生时,发生后我们都可以对请求进行拦截
拦截器可以做什么
拦截器可以用于权限验证、解决乱码、操作日志记录、性能监控、异常处理等
自定义拦截器
可以通过继承Spring框架中的HandlerInterceptorAdapter类,然后重写preHandle,postHandle,afterCompletion三个方法,在三个方法中写我们自己要想实现的业务逻辑代码.
1 |
/** |
a) public boolean preHandle(HttpServletRequest request,HttpServletResponse response,
Object handler) throws Exception
该方法在action执行前执行,可以实现对数据的预处理,比如:编码、防重复提交安全控制等。
如果方法返回true,则继续执行action。返回false则拦截请求
b) public void postHandle(HttpServletRequest request,HttpServletResponse response,
Object handler,ModelAndView modelAndView) throws Exception
该方法在action执行后,生成视图前执行。在这里,我们有机会修改视图层数据。
c) public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception
最后执行,通常用于释放资源,处理异常。我们可以根据ex是否为空,来进行相关的异常处理。
注册拦截器
在xml文件中配置:
1 |
<mvc:interceptors> |
当有多个拦截器的时候可以写多个bean
当我们只想拦截部分指定请求时:
1 |
<mvc:interceptors> |
多个拦截器
xml配置:
1 |
<mvc:interceptors> |
当配置有多个拦截器的时候,会按拦截器顺序执行preHandle方法,然后再倒序执行postHandle和afterCompletion方法。
其他实现方式
- 实现接口
implements HandlerInterceptor - 实现接口
implements WebRequestInterceptor
注册拦截器方法不变
与过滤器的区别
1.过滤器是依赖于Servlet容器,基于回调函数,Intercepto依赖与框架,基于反射机制
2.过滤器的过滤范围更大,还可以过滤一些静态资源,拦截器只拦截请求
SpringMVC中拦截器的使用的更多相关文章
- springmvc中拦截器与springmvc全局异常处理器的问题
最近在做一个练手的小项目, 系统架构中用了springmvc的全局异常处理器, 做了系统的统一异常处理. 后来加入了springmvc的拦截器, 为了一些需求, 在拦截器中的 preHandle 方法 ...
- SSM-SpringMVC-33:SpringMVC中拦截器Interceptor讲解
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 拦截器Interceptor: 对处理方法进行双向的拦截,可以对其做日志记录等 我选择的是实现Handler ...
- springmvc中拦截器配置格式
对于springmvc,有两种方式配置拦截器. 一是实现HandlerInterceptor接口,如 public class MyInterceptor1 implements HandlerInt ...
- springmvc中拦截器的定义和配置
package com.hope.interceptor;import org.springframework.lang.Nullable;import org.springframework.web ...
- springmvc的拦截器
什么是拦截器 java里的拦截器是动态拦截action调用的对象.它提供了一种机制可以使 ...
- SpringMVC利用拦截器防止SQL注入
引言 随着互联网的发展,人们在享受互联网带来的便捷的服务的时候,也面临着个人的隐私泄漏的问题.小到一个拥有用户系统的小型论坛,大到各个大型的银行机构,互联网安全问题都显得格外重要.而这些网站的背后,则 ...
- SpringMVC经典系列-14自己定义SpringMVC的拦截器---【LinusZhu】
注意:此文章是个人原创.希望有转载须要的朋友们标明文章出处.假设各位朋友们认为写的还好,就给个赞哈.你的鼓舞是我创作的最大动力,LinusZhu在此表示十分感谢,当然文章中如有纰漏,请联系linusz ...
- SpringMVC 学习-拦截器 HandlerInterceptor 类
一.拦截器 HandlerInterceptor 类的作用 SpringMVC 的拦截器类似于 Servlet 开发中的过滤器 Filter,用于对处理器进行预处理和后处理. 二.怎么使用呢? 1. ...
- shiro中拦截器机制
8.1 拦截器介绍 Shiro使用了与Servlet一样的Filter接口进行扩展:所以如果对Filter不熟悉可以参考<Servlet3.1规范>http://www.iteye.com ...
随机推荐
- Tomcat手动指定jdk路径
Windows系统: 修改bin下的setclasspath.bat,在开头处添加: rem set specific jdkset JAVA_HOME=%CATALINA_HOME%\jdk1.8. ...
- [转]nginx启动期都做了哪些事
nginx是个多进程web容器,不同的配置下它的启动方式也是不同的,这里我只说说最典型的启动方式. 它有1个master进程,和多个worker进程(最优配置的数量与CPU核数相关).那么,首先我们要 ...
- [PAT] 1141 PAT Ranking of Institutions(25 分)
After each PAT, the PAT Center will announce the ranking of institutions based on their students' pe ...
- selenium+python自动化78-autoit参数化与批量上传【转载】
转至博客:上海-悠悠 前言前一篇autoit实现文件上传打包成.exe可执行文件后,每次只能传固定的那个图片,我们实际测试时候希望传不同的图片.这样每次调用的时候,在命令行里面加一个文件路径的参数就行 ...
- 《java并发编程实战》读书笔记7--线程池的使用
第8章 线程池的使用 8.1 在任务与执行策略之间的隐性耦合 虽然Executor框架为制定和修改执行策略都提供了相当大的灵活性,但并非所有的任务都适用所有的执行策略.有些类型的任务需要明确地指明执行 ...
- JAVA二叉树的创建以及各种功能的实现
直接上代码了,代码说得很清楚了 package BTree; public class BTree { private Node root; private class Node { private ...
- [Android] 按钮单击事件的五种写法
在平时学习安卓的过程中,不论是看视频还是看博客,我发现每个人对代码的写法都有不同的偏好,比较明显的就是对控件响应事件的写法的不同.所以我想把这些写法总结一下,比较下各种写法的优劣,希望可以让自己可以灵 ...
- 【转载】AsyncTask源码分析
原文地址:https://github.com/white37/AndroidSdkSourceAnalysis/blob/master/article/AsyncTask%E5%92%8CAsync ...
- HashMap底层数据结构和算法解析
1.Hash Map的数据结构? A:哈希表结构(链表散列:数组+链表)实现,结合数组和链表的优点.当链表长度超过8时,链表转换为红黑树. transient Node<K,V>[] ta ...
- 并发系列5-大白话聊聊Java并发面试问题之微服务注册中心的读写锁优化【石杉的架构笔记】