springMVC拦截器

springmvc拦截器的定义和配置

  • Springmvc的处理器拦截器类似于Servlet 开发中的过滤器Filter,用于对处理器进行预处理和后处理
  • springmvc拦截器的定义: 在springmvc中,定义拦截器要实现HandlerInterceptor接口,并实现该接口中提供的三个方法image
    • preHandle方法:进入Handler方法之前执行。可以用于身份认证、身份授权。比如如果认证没有通过表示用户没有登陆,需要此方法拦截不再往下执行(return false),否则就放行(return true)
    • postHandle方法:进入Handler方法之后,返回ModelAndView之前执行。可以看到该方法中有个modelAndView的形参。应用场景:从modelAndView出发:将公用的模型数据(比如菜单导航之类的)在这里传到视图,也可以在这里同一指定视图
    • afterCompletion方法:执行Handler完成之后执行。应用场景:统一异常处理,统一日志处理等。
  • springmvc拦截器的配置
    • 在springmvc中,拦截器是针对具体的HandlerMapping进行配置的,也就是说如果在某个HandlerMapping中配置拦截,经过该 HandlerMapping映射成功的handler最终使用该拦截器
    • 假设我们在配置文件中配置了的映射器是org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping

      <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
      <property name="interceptors">
      <list>
      <ref bean="handlerInterceptor1"/>
      <ref bean="handlerInterceptor2"/>
      </list>
      </property>
      </bean>
      <bean id="handlerInterceptor1" class="ssm.intercapter.HandlerInterceptor1"/>
      <bean id="handlerInterceptor2" class="ssm.intercapter.HandlerInterceptor2"/>
  • ==配置类似于全局的拦截器==,建议使用

    • springmvc框架将配置的类似全局的拦截器注入到每个HandlerMapping中,这样就可以成为全局的拦截器了
      
        <!-- springmvc配置类似于全局的拦截器 -->
      <mvc:interceptors>
          <!-- 多个拦截器,按顺序执行 -->        
          <mvc:interceptor>
              <!-- 指定要拦截的url  -->
              <mvc:mapping path="/**"/> <!-- 表示拦截所有的url包括子url路径 -->
              <bean class="com.td.interceptor.HandlerInterceptor1"/>
          </mvc:interceptor>
         <mvc:interceptor>
              <mvc:mapping path="/**"/>
              <bean class="com.td.interceptor.HandlerInterceptor2"/>
          </mvc:interceptor>
          <mvc:interceptor>
              <mvc:mapping path="/**"/>
              <bean class="com.td.interceptor.HandlerInterceptor3"/>
          </mvc:interceptor>
      </mvc:interceptors>

拦截器的执行顺序

  • 定义三个拦截器进行测试
    1. 三个拦截器都放行,将三个拦截器的方法的返回值都改为true,拦截器的执行顺序如下
      • 测试结果:这里写图片描述
      • 当多有的拦截器都放行的时候,preHanler方法是按照配置的顺序执行的,其他方法是按照配置的顺序逆向执行的
    2. 第三个拦截器不放行,其他拦截器放行
      • 测试结果:这里写图片描述
      • ==总结==:
      • 因为拦截器1和拦截器2放行,拦截器3的preHandler方法才可以执行,前面的拦截器放行后面的拦截器才会执行preHandler
      • 拦截器3不放行,拦截器3的另外两个方法不会被执行,也就是如果某个拦截器不放行,那么它的另外两个方法就不会执行
      • 只要有一个拦截器不放行,所有拦截器的postHandler方法都不会执行,但是只好执行过 preHandler并且放行的拦截器,就会执行afterCompletion方法
    3. 三个拦截器都不放行
      • 测试结果:这里写图片描述
      • 原因同上

拦截器的使用

  • 根据拦截器执行顺序的第二中情况:比如现在要写一个统一异常处理的逻辑,那么要将该拦截器放在拦截器链的第一个位置,且一定要放行,因为只有放行了,才会去执行afterCompletion,而且放在拦截器链的第一个的话,afterCompletion方法会最后执行,才能在里面执行统一异常处理的逻辑。
  • 登陆认证拦截器,放在拦截器链接中第一个位置(如果有统一异常处理,那么应该放在统一异常处理的后面)。权限校验拦截器,放在登陆认证拦截器之后(因为登陆通过后才校验权限)。

实例:登录认证拦截器

  • 思路:
    • 首先拦截到用户访问的url,判断如果这个url是公开的地址(不需要登录就可以访问的,那么就return true 放行)
    • 其次判断,Session中的用户信息,如果存在,直接放行
    • 最后,也就是没有用户的登录信息,转发到登录页面
  • 实现登录的Controller方法这里写图片描述
  • 拦截器这里写图片描述
  • 配置拦截器这里写图片描述
  • 登录代码:这里写图片描述
Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值