SpringMVC的拦截器(笔记)

拦截器主要作用是:加入一些条件判断,通过这些判断决定是否走下一步。是AOP思想的实现。
应用场景:
1、日志记录:记录请求信息的日志,以便进行信息监控、信息统计、计算PV(Page View)等。
2、权限检查:如登录检测,进入处理器检测检测是否登录,如果没有直接返回到登录页面;
3、性能监控:有时候系统在某段时间莫名其妙的慢,可以通过拦截器在进入处理器之前记录开始时间,在处理完后记录结束时间,从而得到该请求的处理时间(如果有反向代理,如apache可以自动记录);
4、通用行为:读取cookie得到用户信息并将用户对象放入请求,从而方便后续流程使用,还有如提取Locale、Theme信息等,只要是多个处理器都需要的即可使用拦截器实现。
5、OpenSessionInView:如Hibernate,在进入处理器打开Session,在完成后关闭Session。

步骤

1.实现HandlerInterceptor接口或者继承HandlerInterceptorAdapt。

我这里写的是实现接口。

@Controller
public class Myinterceptor implements HandlerInterceptor {
	
	//这个是最开始走的方法。只有返回值为true才会继续走,否则就会被拦截起来
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		if(request.getSession().getAttribute("uname")==null) {
			
			response.sendRedirect("login.jsp");
			return false;
		}
		System.out.println(request.getSession().getAttribute("uname"));
		return true;
	}
	//在这里可以做一些处理,就行量日志一样
	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
		
		System.out.println(request.getSession().getAttribute("uname"));
		StringBuffer sb = new StringBuffer();
		sb.append("ip:"+request.getRemoteAddr()+"--");
		sb.append("user:"+request.getSession().getAttribute("uname")+"--");
		sb.append("time:"+new Date().toLocaleString());
		
		
		File file = new File("d:\\log1.txt");
		
		
		BufferedWriter bw =new BufferedWriter(new FileWriter(file,true));
		
		bw.append(sb);
		bw.newLine();
		System.out.println(sb);
		bw.close();
		
		HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
	}
	
	//最后这个类似于after是最后走的一方法。
	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
		// TODO Auto-generated method stub
		HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
	}

}

2.在springMVC的配置文件中配置拦截器:

<!-- 配置拦截器 -->
<mvc:interceptors>
<mvc:interceptor>
<!-- 所有路径都会拦截 -->
<mvc:mapping path="/**"/>
<!-- exclude-mapping是不拦截的 -->
<mvc:exclude-mapping path="/login.jsp"/>
<mvc:exclude-mapping path="/download"/>
<bean class="com.etc.interceptor.Myinterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
执行顺序

在这里插入图片描述

多个拦截器的执行顺序

在这里插入图片描述

interceptor1-pre
interceptor2-pre
interceptor2-post
interceptor1-post
interceptor2-aft
interceptor1-aft
SpringMVC拦截器和Servlet中Filter区别****:

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值