您的位置:首页 > 编程语言 > Java开发

SpringMVC之拦截器(interceptors)的简介及用法

2017-10-13 21:01 701 查看

一、什么是拦截器?

spring提供的一个特殊的组件,当DispatcherServlet收到请求之后,如果有拦截器,会先调用拦截器,然后调用响应的处理器(Controller)。 注: 过滤器属于servlet规范,而拦截器属于spring框架。

二、如何写一个拦截器?

1.写一个java类,实现HandlerInterceptor接口

//实现HandlerInterceptor接口
//可自动生成preHandle()、postHandle()、afterCompletio()方法
public class SomeInterceptor
implements HandlerInterceptor{
/**
* DispatcherServlet收到请求之后,会先调用preHandle方法
* 如果该方法的返回值为true,则继续向后调用
* 如果该方法的返回值为false,则不再向后调用
*
* Object handler:描述处理器方法的一个对象
*/
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler)
throws Exception {
System.out.println("preHandle()");
return true;
}
/**
* 处理器(Controlle)的方法已经执行完毕
* 正准备将结果(ModelAndView对象)返回
* 给DispatcherServlet之前执行postHandle方法
* 可以在该方法里去修改处理器返回的结果
*/
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
System.out.println("postHandle()");
}

/**
* 当preHandle返回值为true该方法才会执行
* afterCompletion在postHandle方法执行之后才执行
*
* Exception ex处理处理器所抛出的异常,可以写一个拦截器用来处理处理器抛出的异常
*/

public void afterCompletion(HttpServletRequest request,
HttpServletResponse response,
Object handler, Exception ex)
throws Exception {
System.out.println("afterCompletion()");
}

}


2.实现具体的拦截处理逻辑。比如:session验证

public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler)
throws Exception {
System.out.println("preHandle()");
HttpSession session=
request.getSession();

Object obj =
session.getAttribute("admin");
if(obj == null) {
//未登录,重定向到登录界面
response.sendRedirect("toLogin.do");
return false;
}
return false;
}


3.配置拦截器

<!-- 配置拦截器 -->
<!-- 如果有多个拦截器,会按照配置的先后顺序执行 -->
<mvc:interceptors>
<mvc:interceptor>
<!-- 拦截器路径配置 -->
<!-- 拦截路径多的话会分层多加一个*号
即拦截所有的请求路径为/**
-->
<!-- 要拦截的路径 -->
<mvc:mapping path="/**"/>
<!-- 拦截器不需要拦截的路径 -->
<mvc:exclude-mapping path=""/>
<!-- 拦截器类 -->>
<bean class="拦截器要拦截的java代码路径">
</mvc:interceptor>
</mvc:interceptors>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: