Python 官方文档:入门教程 => 点击学习
目录1.什么是拦截器2.自定义拦截器执行流程图3.自定义拦截器应用实例1.快速入门2.注意事项和细节3.Debug执行流程4.多个拦截器1.多个拦截器执行流程示意图2.应用实例3.主
说明
自定义拦截器的三个方法
自定义拦截器执行流程说明
● 应用实例需求
完成一个自定义拦截器,学习一下如何配置拦截器和拦截器的运行流程
● 应用实例-代码实现
1.自定义拦截器
@Component
public class MyInterceptor01 implements HandlerInterceptor {
@Override
public boolean preHandle(httpservletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("MyInterceptor01 --preHandle");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("MyInterceptor01-postHandle");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("MyInterceptor01-afterCompletion");
}
}
2.配置拦截器
拦截配置有三种方式
(1)不指定拦截规则,默认拦截所有
<!--配置自定义拦截器-spring配置文件-->
<mvc:interceptors>
<!--第一种方式,不指定拦截规则默认拦截所有请求-->
<ref bean="myInterceptor01"></ref>
</mvc:interceptors>
(2)指定明确的拦截路径
<!--配置自定义拦截器-spring配置文件-->
<mvc:interceptors>
<!--第一种方式,不指定拦截规则默认拦截所有请求-->
<!--<ref bean="myInterceptor01"></ref>-->
<!--第二种指定拦截路径-->
<mvc:interceptor>
<mvc:mapping path="/hi"/>
<ref bean="myInterceptor01"/>
</mvc:interceptor>
</mvc:interceptors>
(3)通配符方式,也可用于指定不拦截路径
<!--配置自定义拦截器-spring配置文件-->
<mvc:interceptors>
<!--第一种方式,不指定拦截规则默认拦截所有请求-->
<!--<ref bean="myInterceptor01"></ref>-->
<!--第二种指定拦截路径-->
<!-- <mvc:interceptor>
<mvc:mapping path="/hi"/>
<ref bean="myInterceptor01"/>
</mvc:interceptor>-->
<mvc:interceptor>
<!--通配符方式 表示拦截 /h 打头的路径-->
<mvc:mapping path="/h*"/>
<!--/hello不拦截-->
<mvc:exclude-mapping path="/hello"/>
<!--指定对哪个拦截器配置-->
<ref bean="myInterceptor01"/>
</mvc:interceptor>
</mvc:interceptors>
3.创建FurnHandler.java
@Controller
public class FurnHandler {
@RequestMapping(value = "/hi")
public String hi(User user) {
System.out.println("---FurnHandler--hi()---");
return "success";
}
@RequestMapping(value = "/hello")
public String hello() {
System.out.println("---FurnHandler--hello()---");
return "success";
}
@RequestMapping(value = "/ok")
public String ok() {
System.out.println("---FurnHandler--ok()---");
return "success";
}
}
4.interceptor.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>测试自定义拦截器</title>
</head>
<body>
<h1>测试自定义拦截器</h1>
<a href="<%=request.getContextPath()%>/hi" rel="external nofollow" >测试自定义拦截器-hi</a><br><br>
<a href="<%=request.getContextPath()%>/hello" rel="external nofollow" >测试自定义拦截器-hello</a><br/><br/>
<a href="<%=request.getContextPath()%>/ok" rel="external nofollow" >测试自定义拦截器-ok</a><br><br>
</body>
</html>
5.测试
1、默认配置是都所有的目标方法都进行拦截, 也可以指定拦截目标方法, 比如只是拦截 hi
<mvc:interceptor>
<mvc:mapping path="/hi"/>
<ref bean="myInterceptor01"/>
</mvc:interceptor>
2、mvc:mapping 支持通配符, 同时指定不对哪些目标方法进行拦截
<mvc:interceptor>
<mvc:mapping path="/h*"/>
<mvc:exclude-mapping path="/hello"/>
<ref bean="myInterceptor01"/>
</mvc:interceptor>
3、拦截器需要配置才生效,不配置是不生效的.
4、如果 preHandler() 方法返回了 false, 就不会执行目标方法(前提是你的目标方法被拦截 了), 程序员可以在这里根据业务需要指定跳转页面.
执行流程可以参考filter过滤器,执行顺序根据配置的先后顺序
代码实现
新增拦截器
@Component
public class MyInterceptor02 implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("MyInterceptor02-preHandle");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("MyInterceptor02-postHandle");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("MyInterceptor02-afterCompletion");
}
}
配置拦截器
<!--配置自定义拦截器-spring配置文件-->
<mvc:interceptors>
<!--第一种方式,不指定拦截规则默认拦截所有请求-->
<!--<ref bean="myInterceptor01"></ref>-->
<!--第二种指定拦截路径-->
<!-- <mvc:interceptor>
<mvc:mapping path="/hi"/>
<ref bean="myInterceptor01"/>
</mvc:interceptor>-->
<mvc:interceptor>
<!--通配符方式 表示拦截 /h 打头的路径-->
<mvc:mapping path="/h*"/>
<!--/hello不拦截-->
<mvc:exclude-mapping path="/hello"/>
<!--指定对哪个拦截器配置-->
<ref bean="myInterceptor01"/>
</mvc:interceptor>
<mvc:interceptor>
<mvc:mapping path="/hi"/>
<ref bean="myInterceptor02"/>
</mvc:interceptor>
</mvc:interceptors>
这里我们定义了两个拦截器myInterceptor01和myInterceptor02,两个拦截器都会对ip:port/工程路径/hi的请求进行拦截,执行结果如下图所示:
执行流程说明:拦截器的执行先后顺序根据配置的先后顺序执行
在实际开发中我们常用拦截器对登录进行验证
到此这篇关于springMVC超详细介绍自定义拦截器的文章就介绍到这了,更多相关SpringMVC拦截器内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: SpringMVC超详细介绍自定义拦截器
本文链接: https://www.lsjlt.com/news/152229.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0