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

SpringMVC拦截器

2016-03-08 22:54 537 查看
Spring MVC 拦截器

与Servlet Filter 类似的编程组件,用于在Spring的请求流程中横向拦截式编程。

Spring拦截经常用于处理 权限等功能。

1.拦截器的执行流程



2.拦截器的实现过程

1)实现拦截器接口

public class DemoIntercepter
implements HandlerInterceptor {
/**
* 1. 在控制器之前执行的方法
* 2. 返回值是true的时候才能继续执行后续控制器
* 3. 可以利用request传递(共享)数据。
* 4. 不执行后续的控制器,这里可利用response
*   直接返回结果给用户(短路了!)方法返回值false
* 5. handle 代表被调用的控制器。
*/
public boolean preHandle(
HttpServletRequest req,
HttpServletResponse res,
Object handle)
throws Exception {
System.out.println("调用了preHandle");
req.setAttribute("msg","Hello!");
return true;
}
/**
* 在控制器以后执行方法
* 1. 用于处理控制器处理以后的数据
* 2. req 用于共享数据
* 3. res 用于处理结果
* 4. view 中包含 控制器处理以后的 “数据”和“视图”
*/
public void postHandle(
HttpServletRequest req,
HttpServletResponse res,
Object handle,
ModelAndView view) throws Exception {
String msg = (String)
req.getAttribute("msg");
msg += " Spring!";
req.setAttribute("msg", msg);
System.out.println("调用postHandle");
}
/**
* 视图处理以后再执行的方法
* 1. 在视图处理以后执行,是向用户发生显示结果的
*    最后流程位置。
* 2. 可以用户处理异常
* 3. 最后更新显示结果
*/
public void afterCompletion(
HttpServletRequest req,
HttpServletResponse res,
Object handle,
Exception e)
throws Exception {
System.out.println("afterCompletion");
String msg = (String)
req.getAttribute("msg");
msg += " Bye!";
req.setAttribute("msg", msg);
}
}


2)在 spring-mvc.xml 中配置拦截器

<!-- 配置拦截器 -->
<mvc:interceptors>
<mvc:interceptor>
<!-- 定义哪些路径被拦截 -->
<!-- 此路径只能作用一级路径,且不能使用/*,可以配置多个 -->
<mvc:mapping path="/interceptor/*"/>
<mvc:mapping path="/interceptor/demo/*"/>
<mvc:mapping path="/demo.do"/>
<bean class="controller.DemoInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>


3.执行流程

-->preHandle()-->Controller()-->postHandle()

注:afterCompletion()方法在视图(jsp)处理后才执行,不能对视图产生影响。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: