SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理。
比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那样子判断当前时间是否是购票时间。
配置步骤:
1、实现org.springframework.web.servlet.HandlerInterceptor接口,自定义拦截器(处理被拦截请求)。
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import cn.zj.ssm.pojo.User; public class CheckLoginInterceptor implements HandlerInterceptor { /* * 控制器方法执行之前执行 * 返回结果为true表示放行,如果返回为false,表示拦截(可以做权限拦截,登录检查拦截). */ public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { //1.获取sesison中共享的user对象 User user = (User) request.getSession().getAttribute("user"); if(user ==null) { //使用重定向跳转到登录页面 login.jsp response.sendRedirect(request.getContextPath()+"/login.jsp"); //不放行 return false; } //放行 return true; } /* * 控制器方法执行后,视图渲染之前执行(可以加入统一的响应信息). */ @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } /* * 视图渲染之后执行(处理Controller异常信息,记录操作日志,清理资源等) */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { // TODO Auto-generated method stub } }
2、在springmvc配置文件中配置拦截器
<mvc:interceptors> <!--配置检查登录拦截器 --> <mvc:interceptor> <!-- 配置拦截的规则 只会拦截 控制器请求,不会拦截jsp页面 /* 只能拦截一级 如 : /list.do /delete.do 如:/user/list.do , /user/delete.do 二级 不能拦截 /** 可以拦截多级 无论几级都可以 如 /a/b/c/d/list.do --> <mvc:mapping path="/**"/> <!-- 排除拦截的地址,多个地址使用逗号隔开 /user/login.do --> <mvc:exclude-mapping path="/user/login.do"/> <!-- 拦截器的类型 --> <bean class="cn.zj.ssm.interceptor.CheckLoginInterceptor"/> </mvc:interceptor> </mvc:interceptors>