一、自定义拦截器

Spring MVC也可以使用拦截器对请求进行拦截处理,用户可以自定义拦截器来实现特定的功能,自定义的拦截器必须实现HandlerInterceptor接口。

二、HandlerInterceptor接口的三个方法

1.preHandler():

此方法在业务处理器(Controller)处理请求之前被调用。在此方法中可以对用户请求request进行处理。

若返回值为true,则继续调用后续的拦截器和目标方法。若返回值为false,则不会再调用后续的拦截器和目标方法。

* 常用来做权限。日志,事务等。

2.postHandler():

此方法在业务处理器处理完请求后,在DispatcherServlet向客户端返回响应前(调用目标方法之后,渲染视图之前)被调用,在该方法中对用户请求request进行处理。

* 常用来对请求域中的属性或视图做出修改。

3.afterCompletion():

此方法在DispatcherServlet完全处理完请求后被调用

* 常用来做资源释放

三、拦截器和过滤器在执行先后顺序图:

四、拦截器使用举例

用户登录状态检查例子:通过用户发送的请求,判断用户是否登录,若未登录则不允许访问被保护资源

步骤:

1.创建拦截器类

一般拦截器类直接实现HandlerInterceptor接口,重写HandlerInterceptor接口的三个方法就可以了,

但由于此处只需要用到 HandlerInterceptor接口的preHandler()方法,所以我们可以选择继承HandlerInterceptor接口的抽象实现类HandlerInterceptorAdapter,重写其中的preHandler()方法。

在preHandler()方法中我们只需要从session中查询用户信息是否为null,就可以知道用户是否已登录了。

public class LoginInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
HttpSession session = request.getSession();
Admin admin = (Admin) session.getAttribute("loginAdmin");
if (admin == null){
throw new AccessForbiddenException("请登录后再访问!");
}
return true;
}
}

2.注册拦截器

在web.xml中注册拦截器,配置需要拦截和不需要拦截的请求

<!--注册拦截器-->
<mvc:interceptors>
<mvc:interceptor>
<!--mvc:mapping配置要拦截的资源-->
<!-- /* 对应一层路径,比如:/aaa -->
<!-- /** 对应多层路径,比如:/aaa/bbb 或 /aaa/bbb/ccc 或 /aaa/bbb/ccc/ddd-->
<mvc:mapping path="/**"/>
<!--mvc:exclude- mapping配置不拦截的资源-->
<!--去登陆页面,不拦截-->
<mvc:exclude-mapping path="/admin/to/login/page.html"/>
<!--执行登陆操作,不拦截-->
<mvc:exclude-mapping path="/admin/do/login.html"/>
<!--执行退出登录操作,不拦截-->
<mvc:exclude-mapping path="/admin/do/Logout.html"/>
<bean id="loginInterceptor" class="com.atguigu.crowd.mvc.interceptor.LoginInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>

springmvc自定义的拦截器以及拦截器的配置的更多相关文章

  1. SpringMVC——自定义拦截器、异常处理以及父子容器配置

    自定义拦截器: 一.若想实现自定义拦截器,需要实现 org.springframework.web.servlet.HandlerInterceptor 接口. 二.HandlerIntercepto ...

  2. SSM框架之SpringMVC(6)异常处理及拦截器

    SpringMVC(6)异常处理及拦截器 1.异常处理 1.1.异常处理的思路 ​ 系统中异常包括两类:预期异常和运行时异常 RuntimeException,前者通过捕获异常从而获取异常信息,后者主 ...

  3. SpringBoot2.X自定义拦截器实战及新旧配置对比(核心知识)

    简介: 讲解拦截器使用,Spingboot2.x新版本配置拦截拦截器和旧版本SpringBoot配置拦截器区别讲解 1.@Configuration 继承WebMvcConfigurationAdap ...

  4. Spring实现自定义注解并且配置拦截器进行拦截

    有时候我们会自定义注解,并且需要配置拦截器对请求方法含有该自定义注解的方法进行拦截操作 自定义注解类 NeedToken.java import java.lang.annotation.Docume ...

  5. Spring boot自定义拦截器和拦截器重定向配置简单介绍

    大家好: 本文简单介绍一下用于权限控制的Spring boot拦截器配置,拦截器重定向问题. 开发工具:jdk1.8   idea2017(付费版,网上找的破解教程) 1,首先使用idea创建一个Sp ...

  6. struts2拦截器interceptor的三种配置方法

    1.struts2拦截器interceptor的三种配置方法 方法1. 普通配置法 <struts> <package name="struts2" extend ...

  7. Struts2-整理笔记(五)拦截器、拦截器配置

    拦截器(Interceptor) 拦截器是Struts2最强大的特性之一,它是一种可以让用户在Action执行之前和Result执行之后进行一些功能处理的机制. 拦截器的优点 简化了Action的实现 ...

  8. SpringMCVC拦截器不拦截静态资源

    SpringMCVC拦截器不拦截静态资源 SpringMVC提供<mvc:resources>来设置静态资源,但是增加该设置如果采用通配符的方式增加拦截器的话仍然会被拦截器拦截,可采用如下 ...

  9. SpringBoot系列(十一)拦截器与拦截器链的配置与使用详解,你知道多少?

    往期推荐 SpringBoot系列(一)idea新建Springboot项目 SpringBoot系列(二)入门知识 springBoot系列(三)配置文件详解 SpringBoot系列(四)web静 ...

  10. SpringMVC_04 拦截器 【拦截器的编程步骤】【session复习?】

    待更新... 2017年5月13日22:45:31 1 什么是拦截器  spring提供的一个特殊组件,前端控制器 DispacherServlet 在收到请求之后,会先调用拦截器,再调用处理器(Co ...

随机推荐

  1. poj1509最小表示法

    题意:       给你一个循环串,然后找到一个位置,使得从这个位置开始的整个串字典序最小. 思路:       最小表示法的建档应用,最小表示法很好理解,就点贪心的意思,一开始我们枚举两个起点i,j ...

  2. hdu4038贪心(最快上升倍率,好题)

    题意:       给你n个数,然后有两种操作 1.给其中的一个数+1,2.在序列里面增加一个1,然后给你一个m,表示进行了m次操作,最后问你操作之后所有数乘积最大是多少? 思路:      徒弟给我 ...

  3. thinkphp 5中的混合查询

    1.手册样例thinkphp 5.0Db::table('think_user') ->where('name',['like','thinkphp%'],['like','%thinkphp' ...

  4. .NET Core 对象( Transient、Scope、Singleton )生命周期详解 (对象创建以及释放)

    首先我们在VS2019中创建一个.NET Core的控制台程序,方便演示: 需要安装两个依赖包 Microsoft.Extensions.DependencyInjection 依赖注入对象的具体实现 ...

  5. 【BUAA软工】团队任务拆解

    项目 内容 班级:北航2020春软件工程 博客园班级博客 作业:团队任务拆解及时间规划 团队任务拆解 Alpha阶段总体规划 初步完成产品功能规格说明书中的基础功能 目前阶段仅支持本地上传文件至当前N ...

  6. 在?开源社区版的 AirTag 请收下——GitHub 热点速览 v.21.21

    作者:HelloGitHub-小鱼干 在比特币跌到怀疑人生的时候,看着"出血不止"的荷包,是时候来"薅"一波羊毛了.openhaystack 能让你免去购买 A ...

  7. CSS3中的过渡、动画和变换

    一.过渡 过渡效果一般由浏览器直接改变元素的CSS属性实现. a.transition属性 transition 属性是一个简写属性,用于设置四个过渡属性: transition-property t ...

  8. jolokia配置Java监控

    wget http://search.maven.org/remotecontent?filepath=org/jolokia/jolokia-jvm/1.3.6/jolokia-jvm-1.3.6- ...

  9. linux中cat、more、less命令区别详解##less 最合适最好用,和vim一样好用

    linux中cat.more.less命令区别详解 caoxinyiyi关注 0.0362018.07.02 15:46:17字数 641阅读 516 linux中命令cat.more.less均可用 ...

  10. DOCKER学习_015:Docker网络补充

    1 Docker容器使用LINK方式互通 在前面的网络实验中,当同一主机的两个Docker容器,使用Bridge网桥互通时,我们必须使用docker inspect Dockerid查找出Docker ...