什么是拦截器
Spring Web MVC 的处理器拦截器类似于Servlet 开发中的过滤器Filter,用于对处理器进行预处理和后处理
应用场景
在Controller方法执行前执行
校验用户是否登录,校验用户权限
在执行Controller方法之后返回页面之前执行的
获取页面中公共信息的:页面中的公共天气预报,日期
在返回页面之后执行的
记录用户行为,为后期大数据分析用的;写入用户日志
步骤
编写自定义拦截器
package com.itheima.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 HandlerInterceptor1 implements HandlerInterceptor {
/**
* 返回页面之后执行的
*/
@Override
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
System.err.println("===========HandlerInterceptor1==================afterCompletion=============");
}
/**
* 在执行Controller方法之后返回页面之前执行的
*/
@Override
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
throws Exception {
System.err.println("===========HandlerInterceptor1==================postHandle=============");
}
/**
* 在执行Controller方法之前执行的
* 返回
* true:放行
* false: 不能执行Controller
*/
@Override
public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
System.err.println("===========HandlerInterceptor1==================preHandle=============");
return true;
}
}
springmvc的配置文件中配置拦截器
<!-- 配置拦截器 -->
<mvc:interceptors>
<mvc:interceptor>
<!-- 所有的请求都进入拦截器 -->
<mvc:mapping path="/**"/>
<!-- 配置具体的拦截器 -->
<bean class="com.itheima.interceptor.HandlerInterceptor1"></bean>
</mvc:interceptor>
</mvc:interceptors>
案例
- 有一个登录页面,需要写一个Controller访问登录页面
- 登录页面有一提交表单的动作。需要在Controller中处理。
- 判断用户名密码是否正确(在控制台打印)
- 如果正确,向session中写入用户信息(写入用户名username)
- 跳转到商品列表
- 拦截器
- 拦截用户请求,判断用户是否登录(登录请求不能拦截)
- 如果用户已经登录。放行
- 如果用户未登录,跳转到登录页面。