1.拦截器的主要功能

在访问某节点url前拦截客户端发来的请求,判断该请求是否符合自己定义的要求,如果不符合,返回false,该节点url的对应代码不会被执行;如果符合,返回true,可以执行该节点url。

2.在springboot项目中的应用方法

假设有这么一个场景:某电商网站的商品必须登陆后才能查看内容,否则无法进入商品页,那么处理方法就是使用拦截器,具体如下:

创建一个类,命名LoginIntercepter ,该类实现HandlerInterceptor接口,该类上加上@Component注解,加载进spring容器中

实现接口后,有三个方法需要我们处理,分别是preHandle,postHandle,afterCompletion;其中preHandle是访问controller接口之前执行的,在这里我们要写相关逻辑,判断登录状态;postHandle调用前提是preHandle返回true,它是在controller接口方法执行完毕和DispatcherServlet进行视图的渲染之前进行的;afterCompletion用于DispatcherServlet进行视图的渲染之后,多用于清理资源。这里主要用preHandle方法,代码如下:

//这个方法是在访问接口之前执行的,我们只需要在这里写验证登陆状态的业务逻辑,就可以在用户调用指定接口之前验证登陆状态了

@Override

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception {

//每一个项目对于登陆的实现逻辑都有所区别,我这里使用最简单的Session提取User来验证登陆。

HttpSession session = request.getSession();

//这里的User是登陆时放入session的

String user = (String) session.getAttribute("username");

//如果session中没有user,表示没登陆

if (user ==null){

//这个方法返回false表示忽略当前请求,如果一个用户调用了需要登陆才能使用的接口,如果他没有登陆这里会直接忽略掉

//可以重定向到登录接口,让为登录的用户去先登录

response.sendRedirect("/luckmoney/nongyebank");

return false;

}else {

return true;//如果session里有user,表示该用户已经登陆,放行,用户即可继续调用自己需要的接口

}

}

至于postHandle和afterCompletion可以不写。

下面开始配置拦截器,代码如下:

@Configuration   //生命配置类,该类实现WebMvcConfigurer 接口

public class WebConfigurer implements WebMvcConfigurer {

@Autowired

private LoginIntercepter  loginIntercepter;  //注入自己写的拦截器

// 这个方法是用来配置静态资源的,比如html,js,css,等等

@Override

public void addResourceHandlers(ResourceHandlerRegistry registry) {

}

// 这个方法用来注册拦截器,我们自己写好的拦截器需要通过这里添加注册才能生效,addPathPatterns("/**")即是添加的拦截路径,也就是拦截controller的所有接口;.excludePathPatterns("/nongyebank","/login")即是放行的controller接口,这些接口不会被拦截,常用的登录接口和注册接口等不必拦截。

@Override

public void addInterceptors(InterceptorRegistry registry) {

registry.addInterceptor(loginIntercepter).addPathPatterns("/**").excludePathPatterns("/nongyebank","/login");

}

}

这样springboot的拦截器配置完成,这是一个登录的拦截器,目的是防止用户跨过登录直接访问其他内容。

2.在ssm架构项目中的应用方法

ssm架构项目就是spring,springmvc,mybaties的整合,这里的拦截器,主要是在xml中配置的,但是,自己也要定义一下拦截器

假设还是登录拦截的需求,自己写的拦截器和上一个springboot项目的一样,只是在配置上不一样了,springboot用的是注解形式来配置自己的拦截器,而ssm则是在xml中配置,这里是在spring-mvc.xml中配置拦截器:

配置如下

这里,放行的仍然是注册登录和js,img等静态资源,用标签将自己写的拦截器注入spring容器中,运行项目,可以发现只有放行的接口可以访问,其他的需要在登录后才能访问。

这样,拦截器在springboot项目和ssm架构项目的应用就简单实现了。

另外:如果配置多个拦截器,preHandle方法会按照配置的顺序顺序执行,而postHandle和afterCompletion是逆序执行的。

ssm 新建拦截器_拦截器在springboot项目和ssm架构项目的应用相关推荐

  1. 使用什么优化器_优化器怎么选?一文教你选择适合不同ML项目的优化器

    选自lightly.ai 机器之心编译 编辑:小舟.杜伟 为机器学习项目选择合适的优化器不是一件简单的事. 优化器是深度学习领域的重要组成模块之一,执行深度学习任务时采用不同的优化器会产生截然不同的效 ...

  2. ppt复制切片器_切片器化繁为简,盘它 !

    与Power BI 相伴多年的时光里(不知牺牲了我多少游戏娱乐的时间),Power BI 越来越丰富的功能渐渐改变了我们使用Power BI报告的方式,如书签.按钮和选择等功能~~现在,大多数业务用户 ...

  3. webgl 着色器_“着色器”是什么意思? 如何使用HTML5和WebGL创建它们

    webgl 着色器 本文是Microsoft的Web开发技术系列的一部分. 感谢您支持使SitePoint成为可能的合作伙伴. 您可能已经注意到,去年我们第一次谈论了babylon.js ,最近我们发 ...

  4. ssm如何支持热部署_IntelliJ IDEA基于SpringBoot如何搭建SSM开发环境

    之前给大家在博文中讲过如何通过eclipse快速搭建SSM开发环境,但相对而言还是有些麻烦的,今天小编给大家介绍下如何使用IntelliJ IDEA基于SpringBoot来更快速地搭建SSM开发环境 ...

  5. mysql 数据拦截器_拦截器中操作数据库

    做了个小项目,当初设计的是只有一个模块的用户行为被记录,其他不用记录,昨天突然说,要用户在整个系统的行为都要被记录. 很懵逼,如果把用户行为的记录放在各个模块,可以很精确的记录,但是各个模块都要有更改 ...

  6. 如何听节拍器_节拍器使用方法

    节 拍器使用方法 节 拍器是一种可以 设 定每分 钟发 出有 规 律的特定 节 拍的机械,一般 节 拍器可以分 为 机械式和 电 子式两种.机械 节 拍器有个 带 有刻度的 钟摆 ,刻度一般从 每分 ...

  7. java类加载器_类加载器ClassLoader

    上篇文章说到,Class类可以通过一个类的全限定名去加载类,那么底层是如何去加载的呢?这就是我们今天要聊的类加载器ClassLoader,其可以通过一个类的全限定名来获取描述此类的二进制字节流,也即是 ...

  8. java类加载器_类加载器

    回顾一下类加载过程 类加载过程:加载->连接->初始化.连接过程又可分为三步:验证->准备->解析. 一个非数组类的加载阶段(加载阶段获取类的二进制字节流的动作)是可控性最强的 ...

  9. mysql cbo优化器_查询优化器介绍 - PolarDB-X 云原生分布式数据库 - 阿里云

    PolarDB-X接收到一条SQL后的执行过程大致如下: 语法解析器(Parser)将SQL文本解析成抽象语法树(AST). 语法树被转化成基于关系代数的逻辑计划. 优化器(Optimizer)对逻辑 ...

最新文章

  1. hdu 3622 二分+2-sat
  2. C++多继承(多重继承)详解(二)命名冲突
  3. my sql Group_concat函数
  4. 预处理_气体在线分析仪预处理系统的工作内容
  5. IDEA在线和离线安装lombok
  6. php 使用json 教程,如何在php中正确的使用json_PHP
  7. Ogre学习教程:Ogre1.8.1+VS2010环境配置2(转)
  8. MySQL 的主从复制
  9. XY相互独立,且服从指数分布,求U=max(X,Y)和V=min(X,Y)的概率密度函数
  10. 全网首发:Could NOT find JNI (missing: JAVA_AWT_INCLUDE_PATH) 解决办法
  11. 快递鸟接口国内常用快递公司编码表
  12. DDD领域建模基本流程
  13. 斐讯K2刷华硕固件+全套工具
  14. 基于三点说构成的夹角提取特征点
  15. 龙蜥操作系统 Anolis OS 8.6 - 来自阿里云的 CentOS 8 100% 兼容发行版
  16. Unity按钮按下、抬起的反应
  17. 关系的深度——《纸牌屋》伍德克莱尔夫妇的深刻关系
  18. 新增订单统计信息 (20 分)
  19. SAP中重复制造生产计划编制——生产版本
  20. 【Blender】基础物体建模(2)

热门文章

  1. 【设计模式】—— 备忘录模式Memento
  2. [转]Android应用的自动更新
  3. sql 获取第10到20个记录
  4. c语言对抗程序代码,C语言贪吃蛇源程序代码双人对抗
  5. 2021年6月Python小屋编程比赛获奖名单
  6. 使用Python内置集合对象和内置函数filter()过滤无效书评
  7. Python标准库collections中与字典有关的类
  8. 力扣98. 验证二叉搜索树(JavaScript)
  9. 基于matlab的gps信号仿真123,MATLABGPS信号仿真完整源代码.doc
  10. python把图片存放到数据库_使用Python把图片存入数据库