前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >14-SpringMVC拦截器

14-SpringMVC拦截器

作者头像
Ywrby
发布2022-10-27 13:16:52
2180
发布2022-10-27 13:16:52
举报
文章被收录于专栏:YwrbyYwrby

SpringMVC拦截器(Interceptor)

SpringMVC中的拦截器作用类似Servlet中的Filter,用于对处理器进行预处理与后处理

将拦截器按一定顺序连成一条链,这条链被称为拦截器链(Interceptor Chain),在访问被拦截的方法或字段时,拦截器链就会按照指定顺序执行,这也是AOP思想的体现

拦截器与过滤器的区别

区别

过滤器

拦截器

使用范围

是servlet规范中的一部分,任何JavaWeb工程都可以使用

是SpringMVC框架所封装的,只有使用SpringMVC框架的工程才可以使用

拦截范围

在url-pattern中配置了/*的情况下,可以对所有访问资源进行过滤

只能拦截访问的控制器中的业务方法,如果访问的是.jsp.html.css.img等资源文件,是无法拦截的

拦截器基本操作

1. 创建拦截器类,实现HandlerInterceptor接口、

代码语言:javascript
复制
public class MyInterceptor implements HandlerInterceptor {
    /**
     * 在目标方法执行之前执行
     * @return 返回值为布尔类型,表示是否拦截该方法,停止后续执行
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("在目标方法执行之前执行...");
        return true;
    }

    /**
     * 在目标方法执行完成之后,视图对象返回之前 执行
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("在目标方法执行完成之后,视图对象返回之前 执行...");
    }

    /**
     * 在视图返回之后执行
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("在视图返回之后执行...");
    }
}

2. 配置拦截器

代码语言:javascript
复制
<!--配置拦截器链-->
<mvc:interceptors> 
    <mvc:interceptor>
        <!--path指定对哪些资源进行拦截(只能拦截控制器中的业务方法)-->
        <mvc:mapping path="/**"/>
        <bean class="cn.ywrby.interceptor.MyInterceptor"/>
    </mvc:interceptor>
</mvc:interceptors>

3. 测试拦截器效果

控制器实现

代码语言:javascript
复制
@Controller
public class TargetController {

    @RequestMapping("/show")
    public ModelAndView show(){
        System.out.println("目标资源执行");
        ModelAndView modelAndView=new ModelAndView();
        modelAndView.addObject("username","Leslie");
        modelAndView.setViewName("index");
        return modelAndView;
    }
}

jsp页面实现

代码语言:javascript
复制
<%--
  Created by IntelliJ IDEA.
  User: renboyu010214
  Date: 2021/3/14
  Time: 12:54
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <h1>Hello world!${username}</h1>

</body>
</html>

访问控制器业务方法

控制台输出

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-03-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SpringMVC拦截器(Interceptor)
    • 拦截器与过滤器的区别
      • 拦截器基本操作
        • 1. 创建拦截器类,实现HandlerInterceptor接口、
        • 2. 配置拦截器
        • 3. 测试拦截器效果
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档