`
Franciswmf
  • 浏览: 800479 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

SpringMVC 拦截器HandlerInterceptorAdapter

 
阅读更多
<!-- 测试公共校验拦截器 -->
<mvc:interceptors>
	<mvc:interceptor>
		<mvc:mapping path="/crm/**"/>
		<mvc:exclude-mapping path="*/crm/resource/download,*/crm/home/homeInit"/>
		<bean class="com.test.interceptor.DemoInterceptor"/>
	</mvc:interceptor>
</mvc:interceptors>



import java.io.PrintWriter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import com.alibaba.fastjson.JSONObject;
import com.test.exception.DemoValidateException;
import com.test.common.PublicResponse;
import com.test.bean.UserInfo;
import com.test.service.CrmService;
/**
 * 测试公共校验拦截器
 */
public class DemoInterceptor extends HandlerInterceptorAdapter {
	private static final Log logger = LogFactory.getLog(DemoInterceptor.class);
    @Autowired
    private CrmService crmService;
	/**
	 * 在业务处理器处理请求之前被调用 
	 */
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		PrintWriter out=null;
		String logStr="DemoInterceptor.preHandle...";
		logger.info(logStr+"拦截器preHandle方法");
		try{
			UserInfo userInfo=crmService.validateMethod(request);
			logger.info(logStr+String.format("拦截校验通过:token=%s, servletPath=%s, uri=%s, url=%s", request.getHeader("TOKEN_KEY_NAME_DEMO"),request.getServletPath(),request.getRequestURI(),request.getRequestURL()));
			/*
			打印结果:
			 token=CEEADEC1C6591A84E08DCE54136608BC3, 
			 servletPath=,  //取不到
			 uri=/crm/stu/init, 
			 url=http://192.168.12.100:9898/crm/stu/init
			*/
			request.setAttribute("CRM_REQUEST_USERINFO_DEMO", userInfo);
			return true;
		}catch(DemoValidateException e){
    		logger.error(logStr+"公共校验异常");
    		PublicResponse rsp=new PublicResponse();
    		rsp.setRspCode(e.getCode());
    		rsp.setRspMsg(e.getMessage());
            response.setContentType("application/json");
            response.setCharacterEncoding("UTF-8");
    		out =  response.getWriter();
    		out.print(JSONObject.toJSONString(rsp));
    		logger.info(logStr+String.format("拦截校验未通过:token=%s, rsp=%s", request.getHeader("TOKEN_KEY_NAME_DEMO"),JSONObject.toJSONString(rsp)));
    		out.flush();
    	}finally {
			if(null!=out){
				out.close();
			}
		}
		return false;
	}

	/**
	 * 在业务处理器处理请求完成之后,生成视图之前执行 
	 */
	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
		String logStr="DemoInterceptor.postHandle...";
		logger.info(logStr+"拦截器postHandle方法");
		super.postHandle(request, response, handler, modelAndView);
	}
	/**
	 * 在DispatcherServlet完全处理完请求之后被调用,可用于清理资源
	 */
	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
		super.afterCompletion(request, response, handler, ex);
	}
	/**
	 * 处理异步请求(当Controller中有异步请求方法的时候会触发该方法)
	 */
	@Override
	public void afterConcurrentHandlingStarted(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		super.afterConcurrentHandlingStarted(request, response, handler);
	}

}


@RequestMapping(value = "/stu/init", method = RequestMethod.GET)
@ResponseBody
public PublicResponse testControllerMethod(final HttpServletRequest request, final HttpServletResponse response){
	PublicResponse rsp=new PublicResponse();
	//add code here
	try{
//从拦截器过来的request中获取UserInfo 
		UserInfo stu=(UserInfo)request.getAttribute("CRM_REQUEST_USERINFO_DEMO");
		logger.info(logStr+"测试stu="+stu.toString());
	}catch(Exception e){
		e.printStackTrace();
		logger.error("接口异常");
	}
	logger.info("接口响应rsp="+rsp.toString());
	return rsp;
}


参考博客:
-- SpringMvc中使用Interceptor与Filter的注意点
https://www.cnblogs.com/FlyHeLanMan/p/6640941.html
分享到:
评论

相关推荐

    企业级开发-SpringMVC使用拦截器实现用户登录权限验证实验报告.docx

    本实验报告将探讨如何利用 SpringMVC 的拦截器(Interceptor)来实现用户登录权限验证,确保只有已登录的用户才能访问特定的受保护资源。 首先,我们来看一下实验的基本步骤: 1. 创建 `User` 类:这是表示用户...

    SpringMVC拦截器例子详解

    - 自定义拦截器需要继承`HandlerInterceptor` 或 `HandlerInterceptorAdapter` 类,并重写相关方法。 - `preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)`:在请求处理之前...

    springmvc拦截器实现登录验证

    1. **定义拦截器类**:创建一个实现了Spring MVC的`HandlerInterceptor`接口的类,或者继承`HandlerInterceptorAdapter`抽象类。在这个类中,你需要重写`preHandle()`方法,进行登录验证逻辑。 2. **实现登录验证...

    springMVC拦截器

    要创建自定义拦截器,你需要继承 `HandlerInterceptor` 或实现 `HandlerInterceptorAdapter` 类。这两个类都提供了三个核心方法: 1. `preHandle(HttpServletRequest request, HttpServletResponse response, ...

    SpringMVC拦截器的使用

    同时,多个拦截器可以按照指定顺序执行,通过`HandlerInterceptorAdapter`还可以简化拦截器的实现。 在实际开发中,`Interceptor_demo`这个压缩包文件可能包含了示例代码,包括Interceptor的实现以及相关的配置文件...

    SpringMVC拦截器

    在这个"SpringMVC拦截器"的实践中,我们将探讨如何实现一个用于登录验证的拦截器。 首先,我们需要创建一个自定义的拦截器类,该类需要继承自Spring MVC的`HandlerInterceptor`接口或实现`...

    springmvc拦截器

    创建一个Spring MVC拦截器需要实现`HandlerInterceptor`接口或者继承`HandlerInterceptorAdapter`抽象类。例如,我们创建一个名为`LoggingInterceptor`的拦截器: ```java public class LoggingInterceptor extends...

    Spring MVC 拦截器

    在Spring MVC中,拦截器接口由`HandlerInterceptor`定义,而`HandlerInterceptorAdapter`类则提供了一个适配器模式的默认实现,简化了拦截器的开发过程。`HandlerInterceptor`接口包含以下三个核心方法: 1. **`...

    详解SpringMVC拦截器(资源和权限管理)

    SpringMVC拦截器是Spring MVC框架中用于处理请求和响应之间的一种机制,它允许开发者在请求到达控制器之前或之后执行一些额外的操作。拦截器对于资源和权限管理至关重要,因为它们可以实现诸如登录检查、访问控制、...

    SpringMVC 中的拦截器与异常处理

    通过实现`HandlerInterceptor`接口或者继承`HandlerInterceptorAdapter`抽象类,开发者可以定义自己的拦截器。拦截器通常用于实现如登录检查、权限验证、日志记录、性能统计等跨切面的功能。 1. 拦截器的注册:拦截...

    SpringMVC拦截器——实现登录验证拦截器的示例代码

    首先,我们需要创建一个自定义的拦截器类,该类通常会实现Spring MVC提供的`HandlerInterceptor`接口或继承`HandlerInterceptorAdapter`抽象类。在这个示例中,我们可以定义一个名为`LoginInterceptor`的类,如下: ...

    Java实训教程 Java软件开发实战 Java开发框架介绍 SpringMVC_10_拦截器 共7页.pptx

    ### Java实训教程知识点详解——SpringMVC拦截器 #### 一、SpringMVC概述与应用场景 SpringMVC作为Spring框架中的一个模块,主要用于构建Web应用。它是一个基于MVC(Model-View-Controller)设计模式的轻量级框架...

    Springmvc拦截器执行顺序及各方法作用详解

    在实际开发中,如果需要自定义拦截器,可以通过实现HandlerInterceptor接口或者继承HandlerInterceptorAdapter抽象类来实现。例如,一个自定义的AuthInterceptor拦截器,可以在preHandle方法中实现用户权限验证,...

    springmvc传值对象及拦截器

    Spring MVC的拦截器基于AOP(面向切面编程)原理,它们通过实现`HandlerInterceptor`接口或继承`HandlerInterceptorAdapter`抽象类来定义。拦截器链的概念使得多个拦截器可以按照特定顺序执行,每个拦截器都可以决定...

    spring mvc拦截器过滤json中的null值

    要创建一个自定义的拦截器,你需要继承`HandlerInterceptorAdapter`类,并重写其中的三个方法: 1. `preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)`: 在目标处理器执行前...

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

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

    SpringMVC学习(十二)——SpringMVC中的拦截器

    在Spring MVC中,拦截器是通过实现`HandlerInterceptor`接口或者继承`HandlerInterceptorAdapter`抽象类来创建的。 `HandlerInterceptor`接口定义了三个方法: 1. `preHandle(HttpServletRequest request, ...

    SpringMVC中使用Interceptor拦截器

    在Spring MVC框架中,Interceptor(拦截器)是一个强大的工具,用于在请求被控制器处理之前或之后执行特定的逻辑。它们可以用来实现通用的功能,如权限验证、日志记录、性能统计等,避免在每个控制器方法中重复编写...

    springMVC3学习(七)--Interceptor拦截器(源码)

    在Spring MVC中,Interceptor(拦截器)是一种强大的机制,它允许开发者在请求处理前后执行自定义逻辑,而不必侵入到Controller代码中。本篇文章主要探讨了Interceptor的使用及其源码解析,帮助深入理解其工作原理。...

    J简单的springmvc包括拦截、session设置,超时跳转

    定义一个拦截器需要继承`HandlerInterceptor`接口或实现`HandlerInterceptorAdapter`抽象类,并重写`preHandle()`, `postHandle()` 和 `afterCompletion()` 方法。在Spring MVC配置中,通过`&lt;mvc:interceptors&gt;`标签...

Global site tag (gtag.js) - Google Analytics