刚好学到这里,然后觉得这个springmvc的拦截器还是很有用的,比如你直接通过ip地址去访问某个网站的内部,这个时候要是没有拦截器,这个就不相当于跳过了登陆注册直接访问数据库嘛,所以我们要在调用每个方法的时候进行一次拦截,保证你是有权力访问这个网站的
先看在springmvc.xml配置文件中怎么书写
<!-- 配置拦截器 -->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="cn.itheima.springmvc.interceptor.interceptor1"></bean>
</mvc:interceptor>
<!-- <mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="cn.itheima.springmvc.interceptor.interceptor2"></bean>
</mvc:interceptor> -->
</mvc:interceptors>
<mvc:interceptors/>:是拦截器的标签,里面可以配置多个拦截
<mvc:intercepor/>:这个标签内主要写拦截的类型(/**就是所有的都拦截)和拦截的方法(bean内写拦截的方法)
就是当你通过service层访问某个方法的时候就会先通过拦截器一次,把违规的操作进行一次筛选吧,个人觉得
public class interceptor1 implements HandlerInterceptor{
@Override
public void afterCompletion(HttpServletRequest arg0,
HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
// TODO Auto-generated method stub
System.out.println("页面渲染后调用1");
}
@Override
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,
Object arg2, ModelAndView arg3) throws Exception {
// TODO Auto-generated method stub
System.out.println("方法后调用1");
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object object) throws Exception {
System.out.println("方法前调用1");
String URI = request.getRequestURI();
if(!URI.contains("/login")){
String username = (String) request.getSession().getAttribute("username_session");
if(null == username){
response.sendRedirect(request.getContextPath()+"/login.action");
return false;
}
}
return true;
}
}
这个拦截方法实现了HandlerIntercepor接口内的方法,这里实现接口内的三个方法:首先我们要知道什么是方法前,方法后,页面渲染后。这几个抽象的概念(但是我觉得字面意思就是你感觉的那个意思),先看一下图,了解一下拦截器的执行流程
这样的执行过程,如果方法前放行(也就是return ture; 要是return false;就表示拦截),那么才有后面的方法后,和页面渲染后,
如果多个拦截器在,他也有自己的规则:
①preHandle 按拦截器定义顺序调用
②postHandler按拦截器定义逆序调用
③afterCompletion按拦截器定义逆序调用
④posthandler在拦截器链内所有拦截器返成功调用
⑤afterCompletion只有prehandle返回true才调用
大家也可以DUBUG一下看一下它具体的执行流程,哈哈哈,继续保持写博客