博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
handlerinterceptor拦截器返回页面_interceptor:拦截器的使用及其与filter的区别
阅读量:6502 次
发布时间:2019-06-24

本文共 2710 字,大约阅读时间需要 9 分钟。

拦截器与过滤器都是AOP思想的具体实现,拦截器会比过滤器更好用一点。

区别:

  1. 过滤器是依赖于servlet,可以说是Java自带的AOP实现,由Javax包导入;而拦截器是由各个框架实现的AOP实现,Java自己并没有拦截器的类,在spring框架中,自定义拦截器需要实现 HandlerInterceptor接口
  2. 过滤器只能对请求加工两次(访问controller前、访问controller后);而拦截器可以对请求加工三次(访问controller前、访问controller后且视图返回前、视图放回后)

另外:

  1. 在springboot中使用还有一个比较重要的区别:filter可以直接在注解中声明要过滤的请求路径,而interceptor则需要在配置类中专门声明请求路径,这一点拦截器不够方便,但瑕不掩瑜
  2. 网上流传,拦截器只能拦截controller的请求而不能拦截静态资源,经过测试拦截器也能拦截静态资源。这一点与过滤器一致,所有请求都可以拦截

方法

过滤器:

572ba9a0f61d6f944d01da113c746181.png

拦截器:

0d0b0024827ef1dd4fdf82195ee75554.png

SpringBoot中的使用

1:创建interceptor拦截器

public class interceptor01 implements HandlerInterceptor /*extends HandlerInterceptorAdapter */{
@Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println(request.getRequestURI()+" "+System.currentTimeMillis()); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println(request.getRequestURI()+" "+System.currentTimeMillis()); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println(request.getRequestURI()+" "+System.currentTimeMillis()); }}
  • HandlerInterceptorAdapter 是实现了HandlerInterceptor的抽象类,已经过期了
  • request.getRequestURI() 获取请求地址
  • System.currentTimeMillis() 获取当前时间

2:创建controller

@RestControllerpublic class Test14 {
@RequestMapping("/test14/test01") public String test01(){
System.out.println("this is controller01"); return "this is controller01"; } @RequestMapping("/test14/test02") public String test02(){
System.out.println("this is controller02"); return "this is controller02"; }}

3:创建配置类,记住需要使用@Configuration注解

package com.example.demo.config;import com.example.demo.filter.interceptor01;import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.InterceptorRegistry;import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configurationpublic class webmvcconfigure implements WebMvcConfigurer {
@Override public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new interceptor01()).addPathPatterns("/test14/test01","/test14/test02","/form.html");/* registry.addInterceptor(new interceptor01()).addPathPatterns("/test14/*").excludePathPatterns("/test14/test02");*/ }}
  • registry.addInterceptor(new interceptor01()).addPathPatterns("/test14/*").excludePathPatterns("/test14/test02"); 用于排除某uri
  • 配置拦截器的配置类需要使用@Configuration注解

转载地址:http://rolyo.baihongyu.com/

你可能感兴趣的文章
简化代码的微小修改
查看>>
你必须知道的.net学习总结
查看>>
Axure8.0 网页 or App 鼠标滚动效果
查看>>
文件操作示例脚本 tcl
查看>>
大家好,新年快乐。
查看>>
prototype
查看>>
Android学习路线
查看>>
Linux下的redis的持久化,主从同步及哨兵
查看>>
在相同的主机上创建一个duplicate数据库
查看>>
Date15
查看>>
从Date类型转为中文字符串
查看>>
基于multisim的fm调制解调_苹果开始自研蜂窝网调制解调器 最快2024年能用上?
查看>>
mupdf不支持x64_Window权限维持(七):安全支持提供者
查看>>
cf修改游戏客户端是什么意思_瓦罗兰特很有可能取代cf成为国内最火的fps游戏...
查看>>
proto文件支持继承吗_JavaScript继承(一)——原型链
查看>>
labview如何弹出提示窗口_LabVIEW开发者必读的问答汇总,搞定疑难杂症全靠它了!...
查看>>
提取series中的数值_Python中None和numpy.nan的区别
查看>>
hikariconfig mysql_HikariConfig配置解析
查看>>
mysql批量数据多次查询数据库_mysql数据库批量操作
查看>>
jquery 乱码 传参_jquery获取URL中参数解决中文乱码问题的两种方法
查看>>