springboot02-拦截器的使用

主要讲例子,结合例子讲逻辑和原理!

1.拦截器介绍

拦截器概念这里就不讲了  到下一章 和过滤器 监听器一起讲,有对比性!

      2.例子简单架构介绍(很糙)

这里只讲一遍,以后的例子基本上都是这个架构。目录结构如下:

这里只用关心我画红线框框的部分。

    springboot3  是我例子项目的总的父项目,一些共有的依赖包都在这个项目里面。(pom文件这里就不贴了,文章后面会给下载地址!)

   base             springboot3 子项目  也是dao层  所有mybatisplus逆向工程生成的文件都在这个项目中!

  springboot2   是今天这篇文章的例子   他下面有service,web两个子项目  也是他的service和web层

关于mave怎么依赖的,自己照着我的项目结构多在idea练习练习就好了!

3.实际项目中拦截器创建

         实现HandlerInterceptor这个接口,重写  他的这三个接口

 每个接口是干嘛的什么时候执行,在代码中有详细的介绍!实现这个接口后 springboot不知道有这个东西呀,所以咱们还要让它知道有这个!所以就要注册到springboot中,我记得有好几种方法,这里只讲一种!

这个项目中权限校验是结合自定义注解在一起的 ,拦截到后,通过反射判断方法上有没有注解,有注解进行拦截,获取权限值。没有就放行。自定义注解可以自行百度,我代码上也有一部分注释!这里只是做了 拦截登录和权限,如果需要  不登录也可以看到一部分页面的话,可以自定义登录注解,仿照权限拦截器中的写!

这里有好几个坑!

  1. 有些文章中这里  拦截器注册的时候  不实现WebMvcConfigurer 继承WebMvcConfigurerAdapter 。编辑器显示这个方法过时了。这个方法在spring5.0好像  就被废弃了,可以自行百度查阅

  2. 还有的文章是没有 创建bean  而是在注入的时候直接 new拦截器对象 ,这样做会出现在拦截器中注入service接口时 为null,注入不了。原因:bean是在容器中,容器创建在spring上下文加载时,而拦截器加载时间在这之前。容器里面还没有service接口bean 然后你就要取出来用,肯定是null了。解决办法如上

  3. 实现WebMvcConfigurer  还有几个方法可以重写  有兴趣的可以自己百度这个接口查找 用途。

  4. getRequestDispatchersendRedirect 重定向区别:
    
    getRequestDispatcher是服务器内部跳转,地址栏信息不变,只能跳转到web应用内的网页。
    sendRedirect是页面重定向,地址栏信息改变,可以跳转到任意网页。
    这两条网上都查得到,但看着比较乱,现提供我测试的结果(仅供参考):
    1.getRequestDispatcher分成两种,可以用request调用,也可以用getServletContext()调用
       不同的是request.getRequestDispatcher(url)的url可以是相对路径也可以是绝对路径。
       而this.getServletContext().getRequestDispatcher(url)的url只能是绝对路径。
    注:request.getRequestDispatcher(url)之所以可以使用相对路劲,是因为在getRequestDispatcher(url)方法中封装了ServletContext.getRealPath()以获得相应的项目根路径,再通过字符串相加,从而可以获得一个完整的路径
  5. 路径问题  访问的路径最前面加不加 “/”的区别:加”/”代表 绝对路径,是从站点的根目录开始找 不加”/”代表 相对路径,是从当前路径开始找 比如"/000/000" 下一个访问的接口不加/ 则访问 的是 /000/下一个接口名

  6. 使用springboot+thymeleaf模板时 所有的跳转都必须经过后台接口跳转,不能直接页面跳页面 

  7. 配置文件中 
    # MyBatis plus 驼峰命名
    mybatis-plus.configuration.map-underscore-to-camel-case=true  驼峰命名的映射
    ## json时间格式设置
    spring.jackson.time-zone=GMT+8
    spring.jackson.date-format=yyyy/MM/dd HH:mm:ss
  8.  有一个简单的全局异常处理器,有时间可以参考     

代码地址

csdn

猜你喜欢

转载自blog.csdn.net/qq_41353313/article/details/84064863
今日推荐