本文源码:GitHub·点这里 || GitEE·点这里

一、拦截器简介

1、拦截器定义

拦截器,请求的接口被访问之前,进行拦截然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。 拦截器主要用来按照指定规则拒绝请求。

2、拦截器中应用

Token令牌验证
请求数据校验
用户权限校验
放行指定接口

二、SpringBoot2.0拦截器用法

1、编写两个拦截器

自定义类实现HandlerInterceptor接口

1)OneInterceptor 拦截器

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 拦截器一
*/
public class OneInterceptor implements HandlerInterceptor {
private static final Logger LOGGER
= LoggerFactory.getLogger(OneInterceptor.class.getName());
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object o) throws Exception {
String url =String.valueOf(request.getRequestURL()) ;
LOGGER.info("1、url=="+url);
// 放开拦截
return true;
}
@Override
public void postHandle(HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse,
Object o, ModelAndView modelAndView) throws Exception {
LOGGER.info("1、postHandle");
}
@Override
public void afterCompletion(HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse,
Object o, Exception e) throws Exception {
LOGGER.info("1、afterCompletion");
}
}

2)TwoInterceptor 拦截器

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 拦截器二
*/
public class TwoInterceptor implements HandlerInterceptor {
private static final Logger LOGGER
= LoggerFactory.getLogger(TwoInterceptor.class.getName());
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object o) throws Exception {
String url =String.valueOf(request.getRequestURL()) ;
LOGGER.info("2、url=="+url);
// 放开拦截
return true;
}
@Override
public void postHandle(HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse,
Object o, ModelAndView modelAndView) throws Exception {
LOGGER.info("2、postHandle");
}
@Override
public void afterCompletion(HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse,
Object o, Exception e) throws Exception {
LOGGER.info("2、afterCompletion");
}
}

2、Web配置文件中注入拦截器

import com.boot.intercept.intercept.OneInterceptor;
import com.boot.intercept.intercept.TwoInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* Web配置文件
*/
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
public void addInterceptors(InterceptorRegistry registry) {
// 拦截所有路径
// 注册自定义两个拦截器
registry.addInterceptor(new OneInterceptor()).addPathPatterns("/**");
registry.addInterceptor(new TwoInterceptor()).addPathPatterns("/**");
}
}

3、编写测试接口

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class InterceptController {
@RequestMapping("/reqUrl")
public String reqUrl (){
return "success" ;
}
}

4、访问测试接口

日志输出内容如下

intercept.OneInterceptor : 1、url==http://127.0.0.1:8005/reqUrl
intercept.TwoInterceptor : 2、url==http://127.0.0.1:8005/reqUrl
intercept.TwoInterceptor : 2、postHandle
intercept.OneInterceptor : 1、postHandle
intercept.TwoInterceptor : 2、afterCompletion
intercept.OneInterceptor : 1、afterCompletionla

拦截器的拦截顺序,是按照Web配置文件中注入拦截器的顺序执行的。

三、源代码地址

GitHub·地址
https://github.com/cicadasmile/spring-boot-base
GitEE·地址
https://gitee.com/cicadasmile/spring-boot-base

最新文章

  1. A*算法 -- 八数码问题和传教士过河问题的代码实现
  2. Android中JNI的使用方法
  3. Codeforces Round #361 Jul.6th B题 ☺译
  4. php实现注册
  5. 微信浏览器或各种移动浏览器上:active伪类做的触觉反馈失效
  6. Convert.ToDateTime(值),方法可以把一个值转化成DateTime类型。
  7. ModelProxy 前端接口配置建模框架
  8. asp.net 文件上传示例整理
  9. Ubuntu 12.04 升级到14.04之后,pidgin-sipe 出现的问题: Trouble with the pidgin and self-signed SSL certificate
  10. webform中listbox运用,2个相互传值练习1:
  11. hbase:应用开发
  12. 2014ACM/ICPC亚洲区域赛牡丹江站现场赛-K ( ZOJ 3829 ) Known Notation
  13. eclipse Dynamic web project 工程目录
  14. CODEFORCES 125E MST Company 巧用Kruskal算法
  15. 这家IT教育公司太拼了:毕业生找不到工作就全额退学费!
  16. python for循环巧妙运用(迭代、列表生成式)
  17. 总结MySQL大数据量下如何进行优化
  18. mysql为何不支持开窗函数?
  19. SortedSet的实现类是TreeSet:它的作用是字为添加到TreeSet中的元素排序。
  20. Python开发【第三篇】:Python函数

热门文章

  1. UVA - 11624 Fire! 【BFS】
  2. 7-3 堆栈模拟队列(25 point(s)) 【数据结构】
  3. PAT 天梯赛 L2-022. 重排链表 【数据结构】
  4. vs2012环境配置
  5. Linux系统资源查看与设置
  6. c# wpf ComboBox 动态下拉框 及 动态默认值设定
  7. 【Java】CookieStore 类使用示例
  8. BZOJ 1207 [HNOI2004]打鼹鼠:dp【类似最长上升子序列】
  9. 关于STM32中GPIO的8种工作模式
  10. python+selenium自动化测试环境搭建