SpringMVC可以通过配置拦截器,进行url过滤等处理。

在spring-mvc.xml的配置文件中,如下示:

其中,在<mvc:interceptors>中可以配置多个拦截器<mvc:interceptor>。

  1. <!--添加拦截器-->
  2. <mvc:interceptors>
  3. <mvc:interceptor>
  4. <!-- /** 表示拦截所有的请求-->
  5. <mvc:mapping path="/**"/>
  6. <!--以下是拦截器所在的类路径-->
  7. <bean class="com.interceptor.LogInterceptor"/>
  8. </mvc:interceptor>
  9. </mvc:interceptors>

然后添加拦截器类,拦截器主要是通过继承HandlerInterceptorAdapter ,重写其中的几个方法,如下示:

  1. import org.apache.log4j.Logger;
  2. import org.springframework.web.servlet.HandlerInterceptor;
  3. import org.springframework.web.servlet.ModelAndView;
  4. import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
  5.  
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8.  
  9. public class LogInterceptor extends HandlerInterceptorAdapter {
  10. private Logger logger=Logger.getLogger(LogInterceptor.class);
  11.  
  12. /**
  13. * preHandle方法是进行处理器拦截用的,顾名思义,该方法将在Controller处理之前进行调用,
  14. * SpringMVC中的Interceptor拦截器是链式的,可以同时存在多个Interceptor,
  15. * 然后SpringMVC会根据声明的前后顺序一个接一个的执行,
  16. * 而且所有的Interceptor中的preHandle方法都会在Controller方法调用之前调用。
  17. * SpringMVC的这种Interceptor链式结构也是可以进行中断的,
  18. * 这种中断方式是令preHandle的返回值为false,当preHandle的返回值为false的时候整个请求就结束了。
  19. */
  20. @Override
  21. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
  22. String host=request.getRemoteHost();
  23. logger.debug("IP为---->"+host+"<------访问系统.");
  24. return true;
  25. }
  26.  
  27. /**
  28. * 这个方法只会在当前这个Interceptor的preHandle方法返回值为true的时候才会执行。
  29. * postHandle是进行处理器拦截用的,它的执行时间是在处理器进行处理之 后, 也就是在Controller的方法调用之后执行,
  30. * 但是它会在DispatcherServlet进行视图的渲染之前执行,也就是说在这个方法中你可以对ModelAndView进行操作。
  31. * 这个方法的链式结构跟正常访问的方向是相反的,也就是说先声明的Interceptor拦截器该方法反而会后调用,
  32. * 这跟Struts2里面的拦截器的执行过程有点像,
  33. * 只是Struts2里面的intercept方法中要手动的调用ActionInvocation的invoke方法,
  34. * Struts2中调用ActionInvocation的invoke方法就是调用下一个Interceptor或者是调用action,
  35. * 然后要在Interceptor之前调用的内容都写在调用invoke之前,要在Interceptor之后调用的内容都写在调用invoke方法之后。
  36. */
  37. @Override
  38. public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
  39.  
  40. }
  41.  
  42. /**
  43. * 该方法也是需要当前对应的Interceptor的preHandle方法的返回值为true时才会执行。
  44. * 该方法将在整个请求完成之后,也就是DispatcherServlet渲染了视图执行, 这个方法的主要作用是用于清理资源的,
  45. */
  46. @Override
  47. public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
  48. String host=request.getRemoteHost();
  49. logger.debug("IP为------>>"+host+"<<-----------访问成功.");
  50.  
  51. }
  52. }

SpringMvc配置拦截器的更多相关文章

  1. springmvc 配置拦截器

    package com.aaa.zxf.interceptor; import org.springframework.boot.autoconfigure.SpringBootApplication ...

  2. springMVC配置拦截器、过滤器、前端控制器时遇到的问题总结

    1.业务场景:使用vuejs+springMVC+spring框架搭建一个mis系统,集成SSO单点登录: 2.遇到问题:使用interceptor拦截器配置SSO单点登录,直接敲域名,或者ip+端口 ...

  3. springMvc配置拦截器无效

    说明 springMvc配置国际化拦截器失败,点击页面按钮切换中英文无效,排查发现没有进入 LocaleChangeInterceptor 类中,判断拦截器没有起作用,那么是什么原因导致拦截器无效,通 ...

  4. SpringMVC配置拦截器实现登录控制

    SpringMVC读取Cookie判断用户是否登录,对每一个action都要进行判断.之前使用jstl标签在页面上判断session如果没有登录就使用如下代码跳转到登录页面. <c:if tes ...

  5. springmvc中拦截器配置格式

    对于springmvc,有两种方式配置拦截器. 一是实现HandlerInterceptor接口,如 public class MyInterceptor1 implements HandlerInt ...

  6. springmvc中拦截器的定义和配置

    package com.hope.interceptor;import org.springframework.lang.Nullable;import org.springframework.web ...

  7. SpringMVC利用拦截器防止SQL注入

    引言 随着互联网的发展,人们在享受互联网带来的便捷的服务的时候,也面临着个人的隐私泄漏的问题.小到一个拥有用户系统的小型论坛,大到各个大型的银行机构,互联网安全问题都显得格外重要.而这些网站的背后,则 ...

  8. SpringMVC——实现拦截器

    1. SpringMVC拦截器的概念与Struts2相同 2. 实现拦截器 (1) 项目结构 (2) 实现HandlerInterceptor接口 package com.zhengbin.contr ...

  9. SpringMVC经典系列-14自己定义SpringMVC的拦截器---【LinusZhu】

    注意:此文章是个人原创.希望有转载须要的朋友们标明文章出处.假设各位朋友们认为写的还好,就给个赞哈.你的鼓舞是我创作的最大动力,LinusZhu在此表示十分感谢,当然文章中如有纰漏,请联系linusz ...

随机推荐

  1. 在TypeScript中使用其他JS框架或库的方法

    最近刚刚接触TypeScript,感觉非常强大,但是也有一些问题. 比如我们正常写js时,只要把其他js库引入页面,甚至于只要加入到项目中,ReSharper就会自动分析他,并提供语法只能感知,写代码 ...

  2. Python PIL : IOError: decoder jpeg not available

    The first thing I check when I got this error was to check if libjpeg was installed. Lets try this s ...

  3. [QT_OPENCV] qt下opencv配置以及首个opencv工程

    使用环境 : window版本 : win7 x64 QT : 5.8 32bit MinGW530 OpenCv : 3.2 opencv在qt下的环境配置: 在百度上百度了许多关于opencv环境 ...

  4. lambda,reduce,filter用法

    1.lambda的用法 sum = lambda arg1,arg2:arg1+arg2 sum(10,20) --->30 | | 实际上是def sum(arg1,arg2) return ...

  5. Testng优势

    选择Testng的理由: 1.可指定执行顺序, dependsOnMethods 属性来应对测试的依赖性问题. 2.·参数化1:轻轻松松从XML中得到参数 @BeforeClass public vo ...

  6. 【转】Linux 图形界面与命令行模式切换

    原文网址:http://blog.csdn.net/ldl22847/article/details/7600368 Tip:使用环境VMware Workstation    OS:CentOS 6 ...

  7. 基于ffmpegSDK的开发

    #include <stdio.h> #include <libavutil/avutil.h> #include <libavcodec/avcodec.h> # ...

  8. c# 爬虫(一) HELLO WORLD

    最近在摸索爬虫相关的东西,写点随笔,以便忘记. 目的与用途 现实的项目中,我们需要太多的第三方接口了.而往往这些第三方接口由于条件限制,一时拿不到. 譬如: 1. 淘宝网今天有什么特价商品. 2. 百 ...

  9. win7 安装 node-sass报错

    由于国内网络问题,所以会导致下载node-sass二进制包失败 只需要在 ~/.npmrc(当前用户家目录下)添加下面一行: sass_binary_site=https://npm.taobao.o ...

  10. 马士兵Spring-AOP-Aspect例子使用(1)

    一.例子1: 1.工程结构: 2. User.java: package com.cy.model; public class User { private String username; priv ...