java spring 拦截器_Spring MVC拦截器(Interceptor)的配置及使用
在开发一个网站时可能有这样的需求:某些页面只希望几个特定的用户浏览。对于这样的访问权限控制,应该如何实现呢?拦截器就可以实现上述需求。在 Struts 2 框架中,拦截器是其重要的组成部分,Spring MVC 框架也提供了拦截器功能。
Spring MVC 的拦截器(Interceptor)与 Java Servlet 的过滤器(Filter)类似,它主要用于拦截用户的请求并做相应的处理,通常应用在权限验证、记录请求信息的日志、判断用户是否登录等功能上。
拦截器的定义
在 Spring MVC 框架中定义一个拦截器需要对拦截器进行定义和配置,定义一个拦截器可以通过两种方式:一种是通过实现 HandlerInterceptor 接口或继承 HandlerInterceptor 接口的实现类来定义;另一种是通过实现 WebRequestInterceptor 接口或继承 WebRequestInterceptor 接口的实现类来定义。
本节以实现 HandlerInterceptor 接口的定义方式为例讲解自定义拦截器的使用方法。示例代码如下:
package interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class TestInterceptor implements HandlerInterceptor {
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex)
throws Exception {
System.out.println("afterCompletion方法在控制器的处理请求方法执行完成后执行,即视图渲染结束之后执行");
}
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
System.out.println("postHandle方法在控制器的处理请求方法调用之后,解析视图之前执行");
}
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
System.out.println("preHandle方法在控制器的处理请求方法调用之后,解析视图之前执行");
return false;
}
}
在上述拦截器的定义中实现了 HandlerInterceptor 接口,并实现了接口中的 3 个方法。有关这 3 个方法的描述如下。
preHandle 方法:该方法在控制器的处理请求方法前执行,其返回值表示是否中断后续操作,返回 true 表示继续向下执行,返回 false 表示中断后续操作。
postHandle 方法:该方法在控制器的处理请求方法调用之后、解析视图之前执行,可以通过此方法对请求域中的模型和视图做进一步的修改。
afterCompletion 方法:该方法在控制器的处理请求方法执行完成后执行,即视图渲染结束后执行,可以通过此方法实现一些资源清理、记录日志信息等工作。
拦截器的配置
让自定义的拦截器生效需要在 Spring MVC 的配置文件中进行配置,配置示例代码如下:
在上述示例代码中, 元素用于配置一组拦截器,其子元素 定义的是全局拦截器,即拦截所有的请求。
元素中定义的是指定路径的拦截器,其子元素 用于配置拦截器作用的路径,该路径在其属性 path 中定义。
如上述示例代码中,path 的属性值“/**”表示拦截所有路径,“/gotoTest”表示拦截所有以“/gotoTest”结尾的路径。如果在请求路径中包含不需要拦截的内容,可以通过 子元素进行配置。
需要注意的是, 元素的子元素必须按照 、、 的顺序配置。
java spring 拦截器_Spring MVC拦截器(Interceptor)的配置及使用相关推荐
- spring mvc拦截器_Spring MVC拦截器示例
spring mvc拦截器 我认为现在是时候看看Spring的MVC拦截器机制了,这种机制已经存在了很多年,并且是一个非常有用的工具. Spring Interceptor会按照提示说:在传入的HTT ...
- Java web登录拦截器_Spring MVC 拦截器实现登录
上篇博文我在博客中讲到如何使用spring MVC框架来实现文件的上传和下载,今天小钱给大家再来分享和介绍Spring MVC框架中相当重要的一块功能--拦截器. 关于拦截器的概念我在这里就不多说了, ...
- springmvc 拦截器_Spring MVC拦截器学习
1 介绍 Spring Web MVC是基于Servlet API构建的原始Web框架. 2 拦截器 2.1 定义 springmvc框架的一种拦截机制 2.2 使用 2.2.1 两步走 实现Hand ...
- spring 两次进入拦截器_spring mvc 拦截器一次请求拦截两次?
问题描述 对于Spring mvc的拦截器我觉的应该是请求什么就该拦截什么,没有请求的就不该被拦截,但是不知道为什么,在如下的代码中,当我请求/路径的时候,我并没有请求index.html呀,为什么执 ...
- java spring包_java 自定义加载器,加载spring包,动态加载实现,jar包隔离,tomcat加载webapp方式...
java 自定义加载器,加载spring包,动态加载实现,jar包隔离,tomcat加载webapp方式 发布时间:2018-08-20 12:02, 浏览次数:774 , 标签: java spri ...
- java spring redis订阅_spring中订阅redis键值过期消息通知
1.首先启用redis通知功能(ubuntu下操作): 编辑/etc/redis/redis.conf文件,添加或启用以下内容(过期通知): notify-keyspace-events Ex 或者登 ...
- java spring 事务传播_spring事务传播机制实例讲解
天温习spring的事务处理机制,总结如下 对于SQL事务的概念以及ACID性质,可以参见我的另一篇博文 http://kingj.iteye.com/admin/blogs/1675011 spri ...
- java 异步处理数据格式_spring mvc对异步请求的处理
在spring mvc3.2及以上版本增加了对请求的异步处理,是在servlet3的基础上进行封装的. 1.修改web.xml <?xml version="1.0" enc ...
- java spring 是什么_Spring详解(一)------概述
本系列教程我们将对 Spring 进行详解的介绍,相信你在看完后一定能够有所收获. 1.什么是 Spring ? Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开 ...
最新文章
- 集成学习--百面机器学习
- 在Python源中使用UTF-8编码[重复]
- 【翻译自mos文章】OGG replicat 进程使用的 TCP port
- my.ini修改后服务无法启动_VisualSVN Server 自助修改密码页面
- Delphi XE5 for Android (十一)
- 前端微信签名验证工具_微信小程序API 用户数据的签名验证和加解密
- C++设计模式-单例模式(双重锁定)
- kgtp linux内核调试
- Android 布局管理器 之 TableLayout
- ssis 列转换_SSIS组播转换概述
- Jsoup爬虫新手一
- 内存测试软件 ddr 4,DDR4内存理论性能测试
- java的显示图片的控件_调用java在图像控件中显示网络图片
- python计算圆锥体积和表面积_圆锥体积公式和表面积
- git 上上下下左左右右AABB
- 从入门到实战,一文带你彻底读懂Vue3.0
- 网络安全基础(十二)
- 关于绝地求生某辅助白名单画中画逆向分析
- 什么是 PCIe 卡?您需要了解的有关PCI Express卡的所有信息
- Android6.0动态权限申请及RxPermissions权限库使用
热门文章
- 微软也加入FB开放计算项目 发布交换机操作系统
- php 错误日志 redis' already loaded in Unknown on line 0
- ArcGIS 10.7拆分多部件要素(Multipart Features)至单部件要素的两种方法
- 【计算机图形学】实验:VB.net环境下的绘制贝赛尔(Bezier)自由曲线完整实验操作步骤
- 平面坐标(方里网)转换为经纬度坐标
- Android之android.os.NetworkOnMainThreadException异常
- Android插件化开发基础之静态代理模式
- 四、WebApp 基础可视组件(IVX 快速开发教程)
- python typeerror* wants int_python-TypeError:’int’对象是不可迭代的?
- java 获取接口的注解_java反射注解妙用-获取所有接口说明