ssm 新建拦截器_拦截器在springboot项目和ssm架构项目的应用
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架构项目的应用相关推荐
- 使用什么优化器_优化器怎么选?一文教你选择适合不同ML项目的优化器
选自lightly.ai 机器之心编译 编辑:小舟.杜伟 为机器学习项目选择合适的优化器不是一件简单的事. 优化器是深度学习领域的重要组成模块之一,执行深度学习任务时采用不同的优化器会产生截然不同的效 ...
- ppt复制切片器_切片器化繁为简,盘它 !
与Power BI 相伴多年的时光里(不知牺牲了我多少游戏娱乐的时间),Power BI 越来越丰富的功能渐渐改变了我们使用Power BI报告的方式,如书签.按钮和选择等功能~~现在,大多数业务用户 ...
- webgl 着色器_“着色器”是什么意思? 如何使用HTML5和WebGL创建它们
webgl 着色器 本文是Microsoft的Web开发技术系列的一部分. 感谢您支持使SitePoint成为可能的合作伙伴. 您可能已经注意到,去年我们第一次谈论了babylon.js ,最近我们发 ...
- ssm如何支持热部署_IntelliJ IDEA基于SpringBoot如何搭建SSM开发环境
之前给大家在博文中讲过如何通过eclipse快速搭建SSM开发环境,但相对而言还是有些麻烦的,今天小编给大家介绍下如何使用IntelliJ IDEA基于SpringBoot来更快速地搭建SSM开发环境 ...
- mysql 数据拦截器_拦截器中操作数据库
做了个小项目,当初设计的是只有一个模块的用户行为被记录,其他不用记录,昨天突然说,要用户在整个系统的行为都要被记录. 很懵逼,如果把用户行为的记录放在各个模块,可以很精确的记录,但是各个模块都要有更改 ...
- 如何听节拍器_节拍器使用方法
节 拍器使用方法 节 拍器是一种可以 设 定每分 钟发 出有 规 律的特定 节 拍的机械,一般 节 拍器可以分 为 机械式和 电 子式两种.机械 节 拍器有个 带 有刻度的 钟摆 ,刻度一般从 每分 ...
- java类加载器_类加载器ClassLoader
上篇文章说到,Class类可以通过一个类的全限定名去加载类,那么底层是如何去加载的呢?这就是我们今天要聊的类加载器ClassLoader,其可以通过一个类的全限定名来获取描述此类的二进制字节流,也即是 ...
- java类加载器_类加载器
回顾一下类加载过程 类加载过程:加载->连接->初始化.连接过程又可分为三步:验证->准备->解析. 一个非数组类的加载阶段(加载阶段获取类的二进制字节流的动作)是可控性最强的 ...
- mysql cbo优化器_查询优化器介绍 - PolarDB-X 云原生分布式数据库 - 阿里云
PolarDB-X接收到一条SQL后的执行过程大致如下: 语法解析器(Parser)将SQL文本解析成抽象语法树(AST). 语法树被转化成基于关系代数的逻辑计划. 优化器(Optimizer)对逻辑 ...
最新文章
- hdu 3622 二分+2-sat
- C++多继承(多重继承)详解(二)命名冲突
- my sql Group_concat函数
- 预处理_气体在线分析仪预处理系统的工作内容
- IDEA在线和离线安装lombok
- php 使用json 教程,如何在php中正确的使用json_PHP
- Ogre学习教程:Ogre1.8.1+VS2010环境配置2(转)
- MySQL 的主从复制
- XY相互独立,且服从指数分布,求U=max(X,Y)和V=min(X,Y)的概率密度函数
- 全网首发:Could NOT find JNI (missing: JAVA_AWT_INCLUDE_PATH) 解决办法
- 快递鸟接口国内常用快递公司编码表
- DDD领域建模基本流程
- 斐讯K2刷华硕固件+全套工具
- 基于三点说构成的夹角提取特征点
- 龙蜥操作系统 Anolis OS 8.6 - 来自阿里云的 CentOS 8 100% 兼容发行版
- Unity按钮按下、抬起的反应
- 关系的深度——《纸牌屋》伍德克莱尔夫妇的深刻关系
- 新增订单统计信息 (20 分)
- SAP中重复制造生产计划编制——生产版本
- 【Blender】基础物体建模(2)
热门文章
- 【设计模式】—— 备忘录模式Memento
- [转]Android应用的自动更新
- sql 获取第10到20个记录
- c语言对抗程序代码,C语言贪吃蛇源程序代码双人对抗
- 2021年6月Python小屋编程比赛获奖名单
- 使用Python内置集合对象和内置函数filter()过滤无效书评
- Python标准库collections中与字典有关的类
- 力扣98. 验证二叉搜索树(JavaScript)
- 基于matlab的gps信号仿真123,MATLABGPS信号仿真完整源代码.doc
- python把图片存放到数据库_使用Python把图片存入数据库