1)什么是拦截器
spring框架提供的一个组件 当dispatcherServlet收到请求之后,如果有拦截器,会先调用拦截器,然后在调用处理器(Controller)
注:过滤器属于Servlet规范,用于拦截Servlet容器的调用过程,而拦截器属于spring框架,用于拦截DispatcherServlet的调用过程
2)如何写一个拦截器
第一步:写一个Java类,要实现HandlerInterceptor接口
第二步:在拦截器接口方法当中,实现拦截处理逻辑
这两步骤:public class SomeInterceptor implements HandlerInterceptor{
//DispatcherServlet收到请求之后会调用拦截器的prehandle方法
//如果这个方法的返回值为true,表示继续向后调用执行
//如果返回值为false,则不再向后调用
//handler:表示可以通过这个对象获得处理器方法的描述(比如方法名字,参数的类型)
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
System.out.println("哈哈哈哈");
return true;
}
//当处理器(controller)方法已经执行完毕 正准备将处理结果(ModelAndView)返回给DispatcherServlet之前
//会执行postHandle方法
//注:可以在这个方法里面修改 ModelAndView
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
System.out.println("哦哦哦哦哦哦");
}
//请求处理完毕之后,最后执行这个方法
//注:ex 是处理器方法抛出的异常
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
System.out.println("啊啊啊啊啊啊啊");
}
}
第三步:在applicationContext.xml配置文件中配置拦截器
<!-- 配置拦截器 -->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<mvc:exclude-mapping path="/toLogin.do"/> //这是要排除的请求地址,不要进行拦截的
<mvc:exclude-mapping path="/login.do"/>
<bean class="cn.tedu.netctoss.interceptors.SessionInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
spring框架提供的一个组件 当dispatcherServlet收到请求之后,如果有拦截器,会先调用拦截器,然后在调用处理器(Controller)
注:过滤器属于Servlet规范,用于拦截Servlet容器的调用过程,而拦截器属于spring框架,用于拦截DispatcherServlet的调用过程
2)如何写一个拦截器
第一步:写一个Java类,要实现HandlerInterceptor接口
第二步:在拦截器接口方法当中,实现拦截处理逻辑
这两步骤:public class SomeInterceptor implements HandlerInterceptor{
//DispatcherServlet收到请求之后会调用拦截器的prehandle方法
//如果这个方法的返回值为true,表示继续向后调用执行
//如果返回值为false,则不再向后调用
//handler:表示可以通过这个对象获得处理器方法的描述(比如方法名字,参数的类型)
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
System.out.println("哈哈哈哈");
return true;
}
//当处理器(controller)方法已经执行完毕 正准备将处理结果(ModelAndView)返回给DispatcherServlet之前
//会执行postHandle方法
//注:可以在这个方法里面修改 ModelAndView
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
System.out.println("哦哦哦哦哦哦");
}
//请求处理完毕之后,最后执行这个方法
//注:ex 是处理器方法抛出的异常
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
System.out.println("啊啊啊啊啊啊啊");
}
}
第三步:在applicationContext.xml配置文件中配置拦截器
<!-- 配置拦截器 -->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<mvc:exclude-mapping path="/toLogin.do"/> //这是要排除的请求地址,不要进行拦截的
<mvc:exclude-mapping path="/login.do"/>
<bean class="cn.tedu.netctoss.interceptors.SessionInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>