拦截器是SpringMVC框架特有的组件,和过滤器功能相似
自定义拦截器步骤分为以下两步
1. 创建拦截器类实现HandlerInterceptor接口
2. 配置拦截器
假设实现一个系统在访问之前必须先登录,否则将会跳转到登陆页面login.jsp.
1. 创建拦截器类实现HandlerInterceptor接口
package cn.leohams.interceptor;
import cn.leohams.domain.User;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class PrivilegeInterceptor implements HandlerInterceptor {
//在目标方法执行之前 执行
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
User user = (User) httpServletRequest.getSession().getAttribute("user");
if (user == null){
httpServletResponse.sendRedirect(httpServletRequest.getContextPath()+"/login.jsp");
return false;
}
return true;
}
// 在目标方法执行之后 视图对象返回之前执行
@Override
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
}
//在流程都执行完毕之后 执行
@Override
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
}
}
2. 配置拦截器,注意排除login.jsp路径,否则连登陆页面无法实现登陆功能,因为表单数据在提交至控制层之前就被拦截了。
<!-- 配置拦截器-->
<mvc:interceptors>
<mvc:interceptor>
<!-- 配置哪些资源进行拦截-->
<mvc:mapping path="/**"/>
<mvc:exclude-mapping path="/user/login"/>
<bean class="cn.leohams.interceptor.PrivilegeInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>