拦截器Interceptor

1、定义

(1)动态拦截Action调用的对象,在Action执行前后执行一段代码或者在Action执行前阻止其执行,同时也提供了一种可以提取Action中可重用部分代码的方式。
(2)在AOP中,拦截器用于在某个方法或者字段被访问之前,在拦截前后加入某些操作。
(3)java的拦截器主要是用在插件上、扩展件上,如PageHelper插件,拦截器可多次调用。

2、Spring拦截器

Spring对java的拦截器概念进行了包装,HandlerInterceptorAdapter继承了抽象接口HandlerInterceptor。
我们使用Spring拦截器,直接继承HandlerInterceptorAdapter.java这个抽象类。

/**
 * 自定义拦截器
 */
public class LoginInterceptor extends HandlerInterceptorAdapter {

	// 在业务处理器处理请求之前被调用  
	@Override
	public boolean preHandle(HttpServletRequest request,
			HttpServletResponse response, Object handler) throws Exception {
		
		return super.preHandle(request, response, handler);
	}
	
	// 在业务处理器处理请求完成之后,生成视图之前执行 
	@Override
	public void postHandle(HttpServletRequest request,
			HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
		
		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);
	}
	
	//用于处理异步请求
	@Override
	public void afterConcurrentHandlingStarted(HttpServletRequest request,
			HttpServletResponse response, Object handler) throws Exception {
		
		super.afterConcurrentHandlingStarted(request, response, handler);
	}

}

<!-- spring的xml中配置 -->
<mvc:interceptors>
  <mvc:interceptor><!--配置局部拦截器,需要满足下列路径条件-->
    <mvc:exclude-mapping path="/user/logout"/><!--注销-->
    <mvc:exclude-mapping path="/home/"/><!--在home中定义了无须登陆的方法请求,直接过滤拦截-->
    <mvc:mapping path="/**"/>
    <bean class="com.xinx.own.LoginInterceptor"/><!--自定义拦截器注册-->
  </mvc:interceptor>
  <!-- 可以直接注册自定义拦截器Bean来配置全局拦截器,会对所有请求拦截-->
</mvc:interceptors>

3、代码示例
/** 
 * 请求中appid参数若不存在数据库中,则对该请求进行拦截。
 * @author grave-76  
 * @version 2019年8月12日 下午4:05:16 
 *  
 */
public class AppidInterceptor extends HandlerInterceptorAdapter {

	@Resource
	private KingService kingService;
	
	@Override
	public boolean preHandle(HttpServletRequest request,
			HttpServletResponse response, Object handler) throws Exception {
		
		System.out.print("开始进行拦截......");

		String appid = request.getParameter("appid");
		StringBuffer urlName = request.getRequestURL();
		
		if(appid == null) {
			System.out.print("请求中无appid参数,拦截掉:"+urlName);
			return false;
		}
		
		Integer k = kingService.getKingIdByAppid(Integer.parseInt(appid));
		
		if(k == null) {
			System.out.print("数据库中无appid参数,拦截掉:"+urlName);
			return false;
		}
		return true;
	}

	@Override
	public void postHandle(HttpServletRequest request,
			HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
			
		System.out.print("拦截处理完成");
	}	
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值