SpringMVC拦截器简单使用

一、拦截器的配置

1、传统的配置

Xml代码  SpringMVC拦截器简单使用
  1. <bean
  2. class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" >
  3. <property name="interceptors">
  4. <!-- 多个拦截器,顺序执行 -->
  5. <list>
  6. <ref bean="commonInterceptor"/>
  7. </list>
  8. </property>
  9. </bean>
  10. <!--  
  11. 如果不定义mappingURL,则默认拦截所有对Controller的请求 ;  
  12. 可以使用正则表达式对url进行匹配,从而更细粒度的进行拦截(.*/entryOrJsonController\.do\?action=reg.*); 
  13. -->
  14. <bean id="commonInterceptor" class="com.wy.interceptor.CommonInterceptor">
  15. <property name="mappingURL" value=".*/entryOrJsonController\.do\?action=reg.*"/>
  16. </bean>
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" > <property name="interceptors"> <!-- 多个拦截器,顺序执行 --> <list> <ref bean="commonInterceptor"/> </list> </property> </bean> <!-- 如果不定义mappingURL,则默认拦截所有对Controller的请求 ; 可以使用正则表达式对url进行匹配,从而更细粒度的进行拦截(.*/entryOrJsonController\.do\?action=reg.*); --> <bean id="commonInterceptor" class="com.wy.interceptor.CommonInterceptor"> <property name="mappingURL" value=".*/entryOrJsonController\.do\?action=reg.*"/> </bean>

2、基于注解的配置

Xml代码  SpringMVC拦截器简单使用
  1. <!-- 拦截器 -->
  2. <mvc:interceptors>
  3. <!-- 多个拦截器,顺序执行 -->
  4. <mvc:interceptor>
  5. <mvc:mapping path="/entryOrJsonController
  6. @Override
  7. public boolean preHandle(HttpServletRequest request, 
  8. HttpServletResponse response, Object handler) throws Exception
  9. // TODO Auto-generated method stub
  10. log.info("==============执行顺序: 1、preHandle================"); 
  11. String url=request.getRequestURL().toString();  
  12. if(mappingURL==null || url.matches(mappingURL)){  
  13. request.getRequestDispatcher("/msg.jsp").forward(request, response); 
  14. return false;  
  15. }  
  16. return true
  17. //在业务处理器处理请求执行完成后,生成视图之前执行的动作
  18. @Override
  19. public void postHandle(HttpServletRequest request, 
  20. HttpServletResponse response, Object handler, 
  21. ModelAndView modelAndView) throws Exception
  22. // TODO Auto-generated method stub
  23. log.info("==============执行顺序: 2、postHandle================"); 
  24. @Override
  25. public void afterCompletion(HttpServletRequest request, 
  26. HttpServletResponse response, Object handler, Exception ex) 
  27. throws Exception
  28. // TODO Auto-generated method stub
  29. log.info("==============执行顺序: 3、afterCompletion================"); 
  30. }
package com.wy.interceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; public class CommonInterceptor implements HandlerInterceptor { private Logger log = Logger.getLogger(CommonInterceptor.class); public CommonInterceptor() { // TODO Auto-generated constructor stub } private String mappingURL;//利用正则映射到需要拦截的路径 public void setMappingURL(String mappingURL) { this.mappingURL = mappingURL; } @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // TODO Auto-generated method stub log.info("==============执行顺序: 1、preHandle================"); String url=request.getRequestURL().toString(); if(mappingURL==null || url.matches(mappingURL)){ request.getRequestDispatcher("/msg.jsp").forward(request, response); return false; } return true; } //在业务处理器处理请求执行完成后,生成视图之前执行的动作 @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { // TODO Auto-generated method stub log.info("==============执行顺序: 2、postHandle================"); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { // TODO Auto-generated method stub log.info("==============执行顺序: 3、afterCompletion================"); } }

注意:注释中的说明。

完整的spring配置文件

Java代码  SpringMVC拦截器简单使用
  1. <?xml version="1.0" encoding="UTF-8" ?> 
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xmlns:mvc="http://www.springframework.org/schema/mvc"
  6. xmlns:util="http://www.springframework.org/schema/util"  
  7. xsi:schemaLocation=" 
  8. http://www.springframework.org/schema/beans
  9. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
  10. http://www.springframework.org/schema/context
  11. http://www.springframework.org/schema/context/spring-context-3.0.xsd
  12. http://www.springframework.org/schema/mvc
  13. http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
  14. http://www.springframework.org/schema/util
  15. http://www.springframework.org/schema/util/spring-util-3.0.xsd">
  16.  
  17. <!-- 默认的注解映射的支持 ,它会自动注册DefaultAnnotationHandlerMapping 与AnnotationMethodHandlerAdapter  
  18. <mvc:annotation-driven /> 
  19. --> 
  20.  
  21. <!-- 配置静态资源,直接映射到对应的文件夹,不被DispatcherServlet处理,3.04新增功能,需要重新设置spring-mvc-3.0.xsd --> 
  22. <mvc:resources mapping="/jsentryOrJsonController\.do\?action=reg.*); 
  23. --> 
  24. <bean id="commonInterceptor" class="com.wy.interceptor.CommonInterceptor"
  25. <property name="mappingURL" value=".*/entryOrJsonController\.do\?action=reg.*"/> 
  26. </bean> 
  27.  
  28. <!-- 处理方法级别上的@RequestMapping注解--> 
  29. <bean 
  30. class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"
  31. <property name="messageConverters">  
  32. <util:list id="beanList">  
  33. <ref bean="mappingJacksonHttpMessageConverter"/>  
  34. </util:list>  
  35. </property>  
  36. </bean> 
  37.  
  38. <!--  
  39. 将指定路径的请求直接转到对应的view上,而不需要特定的controller来处理请求
  40. 注意:此处的映射路径是/hello,请求时http://localhost:8080/SpringMVC/hello
  41. 不能在hello.xxx,而不使用此种方式的映射可以加的,因为web.xml配置的是‘/’  
  42. --> 
  43. <mvc:view-controller path="/hello" view-name="hello" /> 
  44.  
  45. <!-- 视图解析器策略 视图解析器 --> 
  46. <!-- 对JSTL提供良好的支持 --> 
  47. <bean 
  48. class="org.springframework.web.servlet.view.InternalResourceViewResolver"
  49. <!-- 默认的viewClass,可以不用配置 
  50. <property name="viewClass" value="org.springframework.web.servlet.view.InternalResourceView" /> 
  51. --> 
  52. <property name="prefix" value="/WEB-INF/page/" /> 
  53. <property name="suffix" value=".jsp" /> 
  54. </bean> 
  55.  
  56. <!-- 处理JSON数据转换的 --> 
  57. <bean id="mappingJacksonHttpMessageConverter"  
  58. class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">  
  59. <!-- 为了处理返回的JSON数据的编码,默认是ISO-88859-1的,这里把它设置为UTF-8,解决有乱码的情况 -->  
  60. <property name="supportedMediaTypes">  
  61. <list>  
  62. <value>text/html;charset=UTF-8</value>  
  63. </list>  
  64. </property>  
  65. </bean>  
  66.  
  67. <!-- 拦截器 --> 
  68. <mvc:interceptors> 
  69. <!-- 多个拦截器,顺序执行 --> 
  70. <mvc:interceptor> 
  71. <mvc:mapping path="/entryOrJsonController/*" /><!-- 如果不配置或/*,将拦截所有的Controller --> 
  72. <bean class="com.wy.interceptor.CommonInterceptor"></bean> 
  73. </mvc:interceptor> 
  74. </mvc:interceptors> 
  75.  
  76. <!--  
  77. ResourceBundleViewResolver通过basename所指定的ResourceBundle解析视图名。 
  78. 对每个待解析的视图,ResourceBundle里的[视图名].class所对应的值就是实现该视图的类。 
  79. 同样,[视图名].url所对应的值是该视图所对应的URL。 
  80. 可以指定一个parent view,其它的视图都可以从parent view扩展。 
  81. 用这种方法,可以声明一个默认的视图。 
  82.  
  83. <bean id="messageSource"
  84. class="org.springframework.context.support.ResourceBundleMessageSource"
  85. <property name="basename" value="welcome" /> 
  86. </bean> 
  87. --> 
  88.  
  89. </beans>
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SpringMVC中,可以通过使用`mvc:interceptors`标签来声明需要加入到SpringMVC拦截器链中的拦截器。可以在`mvc:interceptor`标签下定义一个拦截器,然后使用`mvc:mapping`定义该拦截器拦截的请求路径。同时,可以设置多个拦截器,并按照顺序调用`preHandle`方法,然后逆序调用每个拦截器的`postHandle`和`afterCompletion`方法。 需要注意的是,拦截器只会拦截访问的控制器方法(Controller层被注解`@Controller`标注的类),而不会拦截访问的jsp/html/css/image/js等资源文件。这些资源文件不会经过拦截器的处理。所以,自定义的拦截器主要用于对控制器的请求进行预处理和后处理。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [SpringMVC拦截器使用](https://blog.csdn.net/bishe_teacher/article/details/108880336)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [SpringMVC拦截器使用](https://blog.csdn.net/weixin_45608165/article/details/115182584)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值