[TOC]
GitHub:github.com/nateshao/ss…
欢迎关注千羽的公众号
- 拦截器概述
什么是拦截器?
Spring MVC中的拦截器(Interceptor)类似于Servlet中的过滤器(Filter),它主要用于拦截用户请求并作相应的处理。例如通过拦截器可以进行权限验证、记录请求信息的日志、判断用户是否登录等。
要使用Spring MVC中的拦截器,就需要对拦截器类进行定义和配置。通常拦截器类可以通过两种方式来定义。
- 第一种:通过实现
HandlerInterceptor
接口,或继承HandlerInterceptor
接口的实现类(如HandlerInterceptorAdapter)来定义。 - 第二种:通过实现
WebRequestInterceptor
接口,或继承WebRequestInterceptor
接口的实现类来定义。
以实现HandlerInterceptor接口方式为例,自定义拦截器类的代码如下:
1 | java复制代码public class CustomInterceptor implements HandlerInterceptor { |
要使自定义的拦截器类生效,还需要在Spring MVC的配置文件中进行配置。
1 | xml复制代码<mvc:interceptors> |
注意:< mvc:interceptor >中的子元素必须按照上述代码的配置顺序进行编写,否则文件会报错。
- 拦截器的执行流程
在运行程序时,拦截器的执行是有一定顺序的,该顺序与配置文件中所定义的拦截器的顺序相关。
单个拦截器,在程序中的执行流程如下图所示:
多个拦截器的执行流程
多个拦截器(假设有两个拦截器Interceptor1和Interceptor2,并且在配置文件中, Interceptor1拦截器配置在前),在程序中的执行流程如下图所示:
- 应用案例
案例说明 : 实现用户登录权限验证
案例中,只有登录后的用户才能访问系统中的主页面,如果没有登录系统而直接访问主页面,则拦截器会将请求拦截,并转发到登录页面,同时在登录页面中给出提示信息。如果用户名或密码错误,也会在登录页面给出相应的提示信息。当已登录的用户在系统主页中单击“退出”链接时,系统同样会回到登录页面。
login.jsp
1 | jsp复制代码<%@ page language="java" contentType="text/html; charset=UTF-8" |
LoginInterceptor.java
1 | java复制代码package com.nateshao.interceptor; |
UserController.java
1 | java复制代码package com.nateshao.controller; |
main.jsp
1 | jsp复制代码<%@ page language="java" contentType="text/html; charset=UTF-8" |
验证
浏览器输入:http://localhost:8080/110_springmvc_interceptor_war_exploded/main
输入用户名密码
总结
这一篇文章主要对Spring MVC中的拦截器使用进行了详细讲解。
- 首先介绍了如何在Spring MVC项目中定义和配置拦截器,
- 然后详细讲解了单个拦截器和多个拦截器的执行流程,
- 最后通过一个用户登录权限验证的应用案例演示了拦截器的实际应用。
最后我们可以对Spring MVC中拦截器的定义和配置方式有一定的了解,能够熟悉拦截器的执行流程,并能够掌握拦截器的使用。
本文转载自: 掘金