拦截器对使用SpringMvc、Struts的开发人员来说特别熟悉,因为你只要想去做好一个项目必然会用到它。拦截器在我们平时的项目中用处有很多,如:日志记录(我们后续章节会讲到)、用户登录状态拦截、安全拦截等等。而SpringBoot内部集成的是SpringMVC控制框架,所以使用起来跟SpringMVC没有区别,只是在配置上有点不同。废话不多说,我们开始我们本章的内容!

本章目标

学习使用SpringBoot中是如何配置拦截器,使用拦截器来完成简单的用户登录状态判定。

构建项目

我们创建一个名字叫做Chapter6的SpringBoot项目,添加如下maven依赖:Web、MySQL、JPA、Druid等。复制上一章配置文件application.yml到本章对应目录下,具体项目结构如下图1所示:

图1

我们的application.yml文件内容需要修改添加JSP的支持,另外如果你下载后放到你本地的项目时,需要将数据库的地址以及用户名,密码修改成对应自己的配置信息。添加JSP路径配置支持如下图2所示:

图2

InteiiJ IDEA工具为我们创建的SpringBoot项目是不存在webapp、WEB-INF结构目录的,我们需要自行添加,如下图3所示:

图3

可以看到上述图3我们对应的创建了jsp目录,接下来我们分别创建名字叫做,index.jsp,login.jsp的JSP页面文件,index.jsp内填写“你已成功访问到主页面!”,login.jsp创建一个登录表单,输入一个用户名、密码字段,具体内容如下图4、图5所示:

图4
图5

配置控制器

上述JSP文件已经创建完成,下面我们需要让SpringBoot内置SpringMVC控制器转发到对应的JSP页面,我们创建名叫LoginController的类文件,并且加入登录用户的方法,如下图6所示:

图6

下面我们配置用户从数据库中读取,因为之前的表没有“密码”字段我们下图在之前的表内添加一个密码字段如下图7所示:

图7

表结构已经修改,我们根据表结构创建对应的实体,根据实体类直接创建SpringDataJPA的管理接口,SpringDataJPA的具体讲解我留到下面的章节给大家好好的梳理梳理,本章先使用最简单的部分查询功能。我下面直接贴对应的实体类代码以及JPA代码,如下图8、图9所示:

图8
图9

用户的实体以及JPA配置完成后我们再次打开LoginController,将UserJPA使用SpringBean的形式注入,然后完成简单的登录逻辑,如下图10所示:

图10

上图10可以看到我们使用SpringDataJPA从数据库中查询指定用户,然后再比对密码是否符合,我再次修改LoginController在登录成功的地方,添加将用户写入session中。如下图11所示:

图11

到现在我们还没有编写有关拦截器的相关内容,上述都是地基,我们接下来开始盖楼。

创建拦截器

在创建拦截器之前我们需要添加初始化登录页面的转发配置,我们创建IndexController添加初始化登录、首页页面转发配置,如下图12所示:

图12

完成上述操作后,创建一个名叫做SessionInterceptor的拦截器实体类,实现SpringMVC内部接口HandlerInterceptor,并且添加如果没有session状态直接跳转到/user/login_view地址也就是我们对应的login.jsp页面,拦截器配置如下图13所示:

图13

接下来我们需要将SessionInterceptor拦截器添加到SpringBoot的配置中,让SpringBoot项目有这么一个拦截器存在,我们新创建一个SessionConfiguration,将拦截器的配置以及拦截路径配置好,如下图14所示:

图14

好了,我们的所有工作都已经做好,下面我们来初尝试运行项目,看看有没有什么问题

初尝试运行

我们观察InteiilJ IDEA工具的控制台的日志如下图15所示,证明你的项目启动没有问题,那么我们先来访问首页地址尝试登录地址:127.0.0.1:8080/user/index,我们发现了一个意向不到的结果,如下图15所示:

图15

为什么会出现这个问题呢?我们已经排除了/user/login以及/user/login_view请求地址为什么还会出现这个问题呢?遇到这个问题我们可以去SessionInterceptor内打印request.getRequestURI()看看输出的地址,如下图16所示:

图16

我们发现不仅仅有/user/login_view,还存在一个/error页面,为什么出现这个呢?这时才恍然大悟,我们在pom.xml配置文件中并没有配置JSP的支持,我们打开pom.xml配置文件将jsp以及servlet的依赖添加进去,如下图17所示:

图17

完成依赖添加后,重启项目,再次访问127.0.0.1:8080/user/index,现在显示是没有问题了,我们没有登录直接访问index.jsp,当然会被拦截器拦截,拦截后直接跳转到登录页面(login.jsp),如下图18所示效果:

图18

我们现在输入数据库内存在的用户名:admin,密码:123456的测试用户进行登录,效果如下图19所示:

图19

显示我们已经登录成功,也就是说我们的登录用户消息已经存放到session内,那么我们来访问127.0.0.1:8080/user/index地址进行验证,如下图20所示:

图20

可以看到图20效果,我们可以访问到了index.jsp页面的内容了,我们的拦截器完美的完成的拦截使命。

总结

上述内容是本章的全部讲解内容,本章主要内容讲解SpringBoot项目是如果配置拦截器,并且实现简单的用户登录状态验证拦截实例。

本章代码已经上传到码云:

SpringBoot配套源码地址:gitee.com/hengboy/spr…

SpringCloud配套源码地址:gitee.com/hengboy/spr…

SpringBoot相关系列文章请访问:目录:SpringBoot学习目录

QueryDSL相关系列文章请访问:QueryDSL通用查询框架学习目录

SpringDataJPA相关系列文章请访问:目录:SpringDataJPA学习目录

SpringBoot相关文章请访问:目录:SpringBoot学习目录,感谢阅读!

欢迎加入QQ技术交流群,共同进步。

QQ技术交流群

第六章:如何在SpringBoot项目中使用拦截器相关推荐

  1. 如何在SpringBoot项目中使用拦截器

    相比springmvc,springboot中拦截器不需要在xml中配置,只需定义拦截器类 implements HandlerInterceptor 和拦截器拦截路径的配置类extends WebM ...

  2. 在SpringBoot项目中整合拦截器

    拦截器在Web系统中非常常见,对于某些全局统一的操作,我们可以把它提取到拦截器中实现.总结起来,拦截器大致有以下几种使用场景: 1.权限检查:如登录检测,进入处理程序检测用户是否登录,如果没有,则直接 ...

  3. ssm项目中使用拦截器加上不生效解决方案

    ssm项目中使用拦截器加上不生效解决方案 参考文章: (1)ssm项目中使用拦截器加上不生效解决方案 (2)https://www.cnblogs.com/xiufengchen/p/11205283 ...

  4. 一步步教你如何在SpringBoot项目中引入支付功能

    听说微信搜索<Java鱼仔>会变更强哦! 本文收录于JavaStarter ,里面有我完整的Java系列文章,学习或面试都可以看看哦 (一)引言 支付功能如今已经成为一个需要盈利的网站的基 ...

  5. 如何在Spring-Boot项目中配置资源文件夹?视频文件不想放在项目中,怎么做?前台上传文件后台如何访问?什么是资源文件夹?

    如何在Spring-boot项目配置资源文件夹 前言 2.properties文件 二.访问 1.放入资源 2.访问 方式1 方式2 前言 在什么情况下需要配置资源文件夹? 当项目需要读取静态文件夹以 ...

  6. SpringBoot项目使用JWT+拦截器实现token验证

    利用token进行用户身份验证 流程 客户端使用用户名和密码请求登录 服务端收到登录请求,验证用户名和密码 验证成功后,服务端会签发一个token,再把这个token返回给客户端 客户端收到token ...

  7. Springboot项目Aop、拦截器、过滤器横向对比

    前言 伟人曾经说过,没有调查就没有发言权(好像是伟人说的,不管谁说的,这句话是正确的),有些东西看着简单,张口就来,但很有可能是错的.我个人的经验是,aop.过滤器.拦截器的实现方式很简单,一学就会, ...

  8. 小编教您Springboot项目中异常拦截设计与处理

    项目运行过程中会出现各种各样的问题,常见的有以下几种情况: 业务流程分析疏漏,对业务流程的反向操作.边界分析设计不充分 调用外部服务.调用外部系统出现的超时.错误.返回值与预期不符 外部资源连通性问题 ...

  9. SSH项目中遇到拦截器无法注入服务的问题

    2019独角兽企业重金招聘Python工程师标准>>> 配置applicationContext.xml,给自定义拦截器增加了properity属性是一个biz,运行的时候一直报空指 ...

最新文章

  1. 360显示html邮件内容,“邮件怎样发送视频内容”的解决方案
  2. Python3并发检验代理池地址
  3. java哪个软件编程好学吗_java好学吗?java是不是最难学的语言?
  4. 51Node 01组成的N的倍数
  5. 如何在 ASP.NET MVC 中集成 AngularJS(2)
  6. 给.net初学者的一些建议(共勉之)[转载]
  7. 代码整洁之道(一)最佳实践小结 1
  8. layui实现select下拉选择框组件(含代码、案例、截图)
  9. java redis db0 db1_SpringBoot-技术专区-Redis同数据源动态切换db
  10. Centos 6\7下yum安装R
  11. 寒门问题少年到计算机博士,硅谷穷小子是如何成为“创业之神”
  12. SVN下载、安装、配置及使用方法
  13. CAD插件学习系列教程(四) 一款轻量级的CAD里程标注插件
  14. win10设置桌面图标间距
  15. Mob免费验证码androidStudio实现
  16. 常用转义字符例如amp的含义
  17. php中substr函数用法,关于substr函数的详细介绍
  18. Java毕业设计-超市综合管理信息系统
  19. SAP中计量单位有关的表
  20. 印度尼西亚 east java_东爪哇(EAST JAVA)

热门文章

  1. 学习心得_【数字建行大学学习心得】第二期
  2. Java 表单提交下拉框_Java实现Layui的form表单动态绑定下拉框
  3. 区块链技术用解决拜占庭将军问题_区块链是如何解决拜占庭将军问题的?
  4. linux telnet命令不可用的解决办法
  5. [Ext JS 4] Grid 组件
  6. java虚拟机jvm_java虚拟机jvm - zhuyuansj的个人空间 - OSCHINA - 中文开源技术交流社区...
  7. windows php fastcgi,windows下FastCGI(php-cgi)的工作原理和配置
  8. html5 content type,Content-Type一览
  9. Android学习之布局管理器嵌套
  10. 全局变量定义的时候左侧加了static_c语言中static 用法