您的位置:首页 > 编程语言 > Java开发

SpringMVC拦截器配置

2013-10-29 00:00 387 查看
<!-- 传统配置 -->

<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>

<!-- 注解配置 -->

<!-- 拦截器 -->

<mvc:interceptors>

<!-- 多个拦截器,顺序执行 -->

<mvc:interceptor>

<mvc:mapping path="/entryOrJsonController/*" /><!-- 如果不配置或/*,将拦截所有的Controller -->

<bean class="com.wy.interceptor.CommonInterceptor"></bean>

</mvc:interceptor>

</mvc:interceptors>

<!-- java代码 -->

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;

}

/**

* 在业务处理器处理请求之前被调用

* 如果返回false

* 从当前的拦截器往回执行所有拦截器的afterCompletion(),再退出拦截器链

*

* 如果返回true

* 执行下一个拦截器,直到所有的拦截器都执行完毕

* 再执行被拦截的Controller

* 然后进入拦截器链,

* 从最后一个拦截器往回执行所有的postHandle()

* 接着再从最后一个拦截器往回执行所有的afterCompletion()

*/

@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================");

}

/**

* 在DispatcherServlet完全处理完请求后被调用

*

* 当有拦截器抛出异常时,会从当前拦截器往回执行所有的拦截器的afterCompletion()

*/

@Override

public void afterCompletion(HttpServletRequest request,

HttpServletResponse response, Object handler, Exception ex)

throws Exception {

// TODO Auto-generated method stub

log.info("==============执行顺序: 3、afterCompletion================");

}

}

<!-- xml配置 -->

<?xml version="1.0" encoding="UTF-8" ?>

<beans xmlns="
http://www.springframework.org/schema/beans"

xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance"

xmlns:context="
http://www.springframework.org/schema/context"

xmlns:mvc="
http://www.springframework.org/schema/mvc"

xmlns:util="
http://www.springframework.org/schema/util"

xsi:schemaLocation="

http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context-3.0.xsd

http://www.springframework.org/schema/mvc

http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd

http://www.springframework.org/schema/util ;

http://www.springframework.org/schema/util/spring-util-3.0.xsd">

<!-- 默认的注解映射的支持 ,它会自动注册DefaultAnnotationHandlerMapping 与AnnotationMethodHandlerAdapter

<mvc:annotation-driven />

-->

<!-- 配置静态资源,直接映射到对应的文件夹,不被DispatcherServlet处理,3.04新增功能,需要重新设置spring-mvc-3.0.xsd -->

<mvc:resources mapping="/js/**" location="/js/" />

<!-- 自动扫描注解的Controller -->

<context:component-scan base-package="com.wy.controller.annotation" />

<!-- 处理在类级别上的@RequestMapping注解-->

<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>

<!-- 处理方法级别上的@RequestMapping注解-->

<bean

class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" >

<property name="messageConverters">

<util:list id="beanList">

<ref bean="mappingJacksonHttpMessageConverter"/>

</util:list>

</property>

</bean>

<!--

将指定路径的请求直接转到对应的view上,而不需要特定的controller来处理请求 .

注意:此处的映射路径是/hello,请求时
http://localhost:8080/SpringMVC/hello

不能在hello.xxx,而不使用此种方式的映射可以加的,因为web.xml配置的是‘/’

-->

<mvc:view-controller path="/hello" view-name="hello" />

<!-- 视图解析器策略 和 视图解析器 -->

<!-- 对JSTL提供良好的支持 -->

<bean

class="org.springframework.web.servlet.view.InternalResourceViewResolver">

<!-- 默认的viewClass,可以不用配置

<property name="viewClass" value="org.springframework.web.servlet.view.InternalResourceView" />

-->

<property name="prefix" value="/WEB-INF/page/" />

<property name="suffix" value=".jsp" />

</bean>

<!-- 处理JSON数据转换的 -->

<bean id="mappingJacksonHttpMessageConverter"

class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">

<!-- 为了处理返回的JSON数据的编码,默认是ISO-88859-1的,这里把它设置为UTF-8,解决有乱码的情况 -->

<property name="supportedMediaTypes">

<list>

<value>text/html;charset=UTF-8</value>

</list>

</property>

</bean>

<!-- 拦截器 -->

<mvc:interceptors>

<!-- 多个拦截器,顺序执行 -->

<mvc:interceptor>

<mvc:mapping path="/entryOrJsonController/*" /><!-- 如果不配置或/*,将拦截所有的Controller -->

<bean class="com.wy.interceptor.CommonInterceptor"></bean>

</mvc:interceptor>

</mvc:interceptors>

<!--

ResourceBundleViewResolver通过basename所指定的ResourceBundle解析视图名。

对每个待解析的视图,ResourceBundle里的[视图名].class所对应的值就是实现该视图的类。

同样,[视图名].url所对应的值是该视图所对应的URL。

可以指定一个parent view,其它的视图都可以从parent view扩展。

用这种方法,可以声明一个默认的视图。

<bean id="messageSource"

class="org.springframework.context.support.ResourceBundleMessageSource">

<property name="basename" value="welcome" />

</bean>

-->

</beans>

<!--一个拦截器多个mapping path的配置-->

<mvc:interceptor>

<mvc:mapping path="/ads/plan/channel" />

<mvc:mapping path="/ads/plan/keyword" />

<mvc:mapping path="/ads/plan/wordAdd" />

<mvc:mapping path="/ads/plan/save" />

<ref bean="planAgreementInterceptor" />

</mvc:interceptor>

<!——设置spring拦截器若mvc:mapping的path相同则按照配置先后形成拦截器链 ——>

<mvc:interceptors> <mvc:interceptor>

<mvc:mapping path="/*" />

<bean class="test.interceptor.TestInterceptor1" />

</mvc:interceptor> <mvc:interceptor>

<mvc:mapping path="/*" />

<bean class="test.interceptor.TestInterceptor2" />

</mvc:interceptor>

</mvc:interceptors>

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: