`

自定义拦截器

 
阅读更多

springmvc可以使用拦截器对请求进行拦截处理,用户可以自定义拦截器来实现特定功能

自定义拦截器必须实现HandlerInterceptor接口

-preHandle():这个方法在业务处理器处理请求之前被调用,在该方法中对用户请求request

进行处理。如果你决定该拦截器对请求进行拦截处理后还要调用其他拦截器,或者业务处理器

去进行处理,则返回true;如果你决定不需要再调用其他组件处理请求,则返回false

-postHandle():这个方法在业务处理器处理完请求后,但是DispatchServlet向客户端返回

响应前被调用,在该方法中对用户请求request进行处理

-afterCompletion():这个方法在DispatchServlet完全处理完请求后被调用,可以在该方法中

进行一些资源清理操作

 

 

多个拦截器执行顺序



 

package com.hous.crud.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

public class FirstInterceptor implements HandlerInterceptor {

	/* 
	 * 该方法在目标方法之前被调用
	 * 若返回值为true,则继续调用后续的拦截器和目标方法
	 * 若返回值为false,则不会再调用后续的拦截器和目标方法
	 * 
	 * 可以考虑做权限,日志,事务等
	 */
	@Override
	public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
		System.out.println("[FirstInterceptor]preHandle");
		return true;
	}
	
	/* 
	 * 调用目标方法之后,渲染视图之前
	 * 可以对请求域中的属性或视图做出修改
	 */
	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object arg2, ModelAndView mv)
			throws Exception {
//		System.out.println(mv.getViewName());
		System.out.println(request.getRequestURI());
		System.out.println("[FirstInterceptor]postHandle");
	}

	/* 
	 * 渲染视图之后被调用,释放资源
	 */
	@Override
	public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
			throws Exception {
		System.out.println("[FirstInterceptor]afterCompletion");
	}
}

 

<?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:aop="http://www.springframework.org/schema/aop"
	xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
		http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd">

	<!-- 自动扫描bean -->
	<context:component-scan base-package="com.hous.crud"></context:component-scan>
	<!-- 配置视图解析器 -->
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/views/"></property>
		<property name="suffix" value=".jsp"></property>
	</bean>
	<!-- 解决静态资源路径问题 -->
	<mvc:default-servlet-handler/>
	
	<mvc:annotation-driven conversion-service="conversionService"/>
	<!-- 
		将自定义的转换器注册到springmvc上下文中
		org.springframework.context.support.ConversionServiceFactoryBean
		org.springframework.format.support.FormattingConversionServiceFactoryBean
	 -->
	<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
		<property name="converters">
			<set>
				<ref bean="employeeConverter"/>
			</set>
		</property>
	</bean>
	<!-- 配置国际化 -->
	<bean id="messageSource" 
		class="org.springframework.context.support.ResourceBundleMessageSource">
		<property name="basename" value="i18n"></property>
	</bean>
	<!-- 配置SessionLocaleResolver -->
	<bean id="localeResolver" 
		class="org.springframework.web.servlet.i18n.SessionLocaleResolver"></bean>
	<mvc:interceptors>
		<!-- 配置自定义拦截器 -->
		<bean class="com.hous.crud.interceptor.FirstInterceptor" />
		<!-- 配置LocaleChangeInterceptor -->
		<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />
		<mvc:interceptor>
			<mvc:mapping path="/json"/>
			<bean class="com.hous.crud.interceptor.SecondInterceptor" />
		</mvc:interceptor>
	</mvc:interceptors>
	<!-- 
	<mvc:view-controller path="/i18n"/>
	 -->
	<mvc:view-controller path="/i18n2"/>
	
	<!-- 文件上传解析器 -->
	<bean id="multipartResolver"
		class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<property name="defaultEncoding" value="UTF-8"></property>
		<property name="maxUploadSize" value="1024000"></property>
	</bean>
	
</beans>

 

package com.hous.crud.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

public class SecondInterceptor implements HandlerInterceptor {

	/* 
	 * 该方法在目标方法之前被调用
	 * 若返回值为true,则继续调用后续的拦截器和目标方法
	 * 若返回值为false,则不会再调用后续的拦截器和目标方法
	 * 
	 * 可以考虑做权限,日志,事务等
	 */
	@Override
	public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
		System.out.println("[SecondInterceptor]preHandle");
		return true;
	}
	
	/* 
	 * 调用目标方法之后,渲染视图之前
	 * 可以对请求域中的属性或视图做出修改
	 */
	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object arg2, ModelAndView mv)
			throws Exception {
//		System.out.println(mv.getViewName());
		System.out.println(request.getRequestURI());
		System.out.println("[SecondInterceptor]postHandle");
	}

	/* 
	 * 渲染视图之后被调用,释放资源
	 */
	@Override
	public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
			throws Exception {
		System.out.println("[SecondInterceptor]afterCompletion");
	}
}

 

  • 大小: 73.8 KB
  • 大小: 91.8 KB
分享到:
评论

相关推荐

    WebService之自定义拦截器(server+client)

    在IT行业中,Web服务是应用程序之间进行通信的一种标准方法,而WebService之自定义拦截器的实现,无论是对于服务器端还是客户端,都是为了增强服务的功能性和安全性。本文将深入探讨自定义拦截器的概念、作用以及...

    自定义拦截器的实现以及拦截器的详细配置

    本篇文章将深入探讨如何实现自定义拦截器及其在Struts2中的详细配置。 首先,我们来了解自定义拦截器的基本步骤: 1. **创建拦截器类**:自定义拦截器需要继承Struts2提供的`Interceptor`接口或实现`intercept()`...

    springmvc(自定义拦截器的使用)

    自定义拦截器是扩展Spring MVC功能、添加自定义行为的一种常见方式。以下是对自定义拦截器实现步骤的详细解释: ### 1. 自定义拦截器类 #### 1.1 继承 `HandlerInterceptorAdapter` 你可以选择继承`...

    利用反射和动态代理机制实现自定义拦截器Interceptor

    利用反射和动态代理机制实现自定义拦截器Interceptor 在本文中,我们将探讨如何利用反射和动态代理机制来实现自定义拦截器Interceptor。拦截器Interceptor是一种常见的设计模式,用于在方法调用前后执行某些操作,...

    struts2 自定义拦截器.rar

    自定义拦截器是Struts2框架中一个非常重要的特性,允许开发者扩展和定制框架的行为,以满足特定的业务需求。这篇博客文章可能是关于如何在Struts2中创建和使用自定义拦截器的教程。 在Struts2中,拦截器是基于责任...

    struts2自定义拦截器配置心得

    Struts2自定义拦截器的配置是Struts2框架中一个非常重要的功能,它允许开发者在Action执行前后插入自定义的逻辑,以实现如权限验证、日志记录、性能监控等多种需求。以下是对标题和描述中涉及的知识点的详细说明: ...

    CXF3.0+Spring3.2 自定义拦截器

    自定义拦截器在CXF中扮演着重要角色,它们允许我们在服务调用前后执行额外的逻辑,如日志记录、安全检查、性能监控等。这通过实现CXF提供的接口或继承特定的类来实现。以下是一些关键知识点: 1. **CXF拦截器基础**...

    JSP 开发之Struts2内建自定义拦截器.docx

    本文将深入探讨Struts2的内建自定义拦截器及其配置。 首先,让我们理解什么是拦截器。拦截器是基于AOP(面向切面编程)思想的,它们在Action调用前后执行,形成一个拦截器链。每个拦截器都可以执行特定的任务,并且...

    Spring MVC--13.自定义拦截器

    Spring MVC--自定义拦截器Spring MVC--13.自定义拦截器Spring MVC--13.自定义拦截器Spring MVC--13.自定义拦截器Spring MVC--13.自定义拦截器Spring MVC--13.自定义拦截器Spring MVC--13.自定义拦截器

    10.为CXF服务器端添加自定义拦截器进行权限检查

    本文将深入探讨如何为CXF服务器端添加自定义拦截器以执行这样的权限验证。 首先,理解CXF(CXF: Apache CXF - A Next Generation JAXWS and JAX-RS API Implementation)是一个开源的Java框架,它用于创建和部署...

    Mybatis自定义拦截器,对模糊查询传值的特殊字符(\,_,%)统一进行转义处理的代码

    代码包含: EscapeUtil.java:特殊字符(\,_,%)转义工具类 MyQueryInterceptor.java: Mybatis自定义拦截器 注意:该拦截器只支持QueryWrapper的like方法,serviceImpl层传全角模糊查询(%%) mapper或xml层的全角模糊查询(%...

    SpringBoot中自定义拦截器示例代码

    本篇将详细讲解如何在Spring Boot中创建并使用自定义拦截器,并提供相关的示例代码。 首先,我们需要了解Spring MVC中的拦截器(HandlerInterceptor)接口。该接口定义了三个方法: 1. `preHandle...

    Mybatis自定义拦截器,对模糊查询传值的特殊字符统一进行转义处理的代码

    特殊字符(\,_,%)转义工具类 MyQueryInterceptor.java: Mybatis自定义拦截器 注意:该拦截器只支持QueryWrapper的like方法,serviceImpl层传全角模糊查询(%%) mapper或xml层的全角模糊查询(%*%)和半角模糊查询(%*或*%)

    spring集成cxf客户端和服务器端demo(含自定义拦截器)

    在本项目中,"spring集成cxf客户端和服务器端demo(含自定义拦截器)"是一个实战案例,展示了如何在Spring框架下与Apache CXF服务进行整合,实现客户端和服务端的交互,并利用拦截器来增强功能。以下是这个项目涉及的...

    SpringMvc自定义拦截器(注解)代码实例

    首先,自定义拦截器需要实现Spring MVC提供的`HandlerInterceptor`接口。这个接口定义了三个关键方法: 1. `preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)`: 这是在请求被...

    Struts2自定义拦截器

    在深入探讨自定义拦截器之前,我们先理解一下Struts2拦截器的基本概念。 拦截器(Interceptor)是基于Java的动态代理机制实现的,它可以拦截用户的请求,对请求进行预处理,并且在Action执行后进行后处理。通过在...

    struts2的自定义拦截器例子

    在这个"struts2的自定义拦截器例子"中,我们将深入探讨如何创建和使用自定义拦截器。 首先,拦截器的本质是Java的面向切面编程(AOP)思想在Struts2中的体现。它们允许开发者在动作执行前后插入自定义的逻辑,例如...

Global site tag (gtag.js) - Google Analytics