(Portal 开发读书笔记) HandlerInterceptor

简介:

 当对portlet的某请求最终发送到Controller的前后,可以做一些预处理和后处理,这些处理可以用拦截器来实现,他们往往处理与真实的Controller业务无关的事情,比如安全性检查,日志。

要为某Controller应用一组拦截器可以用以下的步骤:

(1)自定义拦截器的类实现,这些拦截器类必须实现HandlerInterceptor接口

(2) 在Spring 的bean配置文件中定义这些拦截器的类的实例,并且将这些实例添加到

HandlerMapping的bean实例的interceptors属性中。

 
 
  1. <bean id="loggingInterceptor" class="..."/> 
  2. <bean id="securityInterceptor" class="..."/> 
  3. <bean id="portletModeHandlerMapping" 
  4. class="org.springframework.web.portlet.handler.PortletModeHandlerMapping"> 
  5. ... 
  6. <property name="interceptors"> 
  7. <list> 
  8. <ref bean="loggingInterceptor"/> 
  9. <ref bean="securityInterceptor"/> 
  10. </list> 
  11. </property> 
  12. </bean> 

(3) 每一个拦截器最终都实现了HandlerInterceptor接口,因此都有以下几个方法:

 
 
  1. public abstract interface HandlerInterceptor 
  2.   public abstract boolean preHandleAction(ActionRequest paramActionRequest, ActionResponse paramActionResponse, Object paramObject) 
  3.     throws Exception; 
  4.  
  5.   public abstract void afterActionCompletion(ActionRequest paramActionRequest, ActionResponse paramActionResponse, Object paramObject, Exception paramException) 
  6.     throws Exception; 
  7.  
  8.   public abstract boolean preHandleRender(RenderRequest paramRenderRequest, RenderResponse paramRenderResponse, Object paramObject) 
  9.     throws Exception; 
  10.  
  11.   public abstract void postHandleRender(RenderRequest paramRenderRequest, RenderResponse paramRenderResponse, Object paramObject, ModelAndView paramModelAndView) 
  12.     throws Exception; 
  13.  
  14.   public abstract void afterRenderCompletion(RenderRequest paramRenderRequest, RenderResponse paramRenderResponse, Object paramObject, Exception paramException) 
  15.     throws Exception; 
  16.  
  17.   public abstract boolean preHandleResource(ResourceRequest paramResourceRequest, ResourceResponse paramResourceResponse, Object paramObject) 
  18.     throws Exception; 
  19.  
  20.   public abstract void postHandleResource(ResourceRequest paramResourceRequest, ResourceResponse paramResourceResponse, Object paramObject, ModelAndView paramModelAndView) 
  21.     throws Exception; 
  22.  
  23.   public abstract void afterResourceCompletion(ResourceRequest paramResourceRequest, ResourceResponse paramResourceResponse, Object paramObject, Exception paramException) 
  24.     throws Exception; 
  25.  
  26.   public abstract boolean preHandleEvent(EventRequest paramEventRequest, EventResponse paramEventResponse, Object paramObject) 
  27.     throws Exception; 
  28.  
  29.   public abstract void afterEventCompletion(EventRequest paramEventRequest, EventResponse paramEventResponse, Object paramObject, Exception paramException) 
  30.     throws Exception; 

 

在Handler(Controller)执行之前,所有拦截器的preHandleXXX()方法会被依次调用,在Handler(Controller)执行之后,所有拦截器的postHandleXXX() 方法会被依次调用。最终afterXXXCompletion()方法会被调用来执行一些清理工作。





本文转自 charles_wang888 51CTO博客,原文链接:http://blog.51cto.com/supercharles888/845170,如需转载请自行联系原作者

目录
相关文章
|
JavaScript 数据可视化 前端开发
《面向三维GIS的Cesium开发与应用》读书笔记
《面向三维GIS的Cesium开发与应用》读书笔记
|
安全 测试技术 数据安全/隐私保护
软件安全开发生命周期读书笔记
分阶段: 0. 教育和意识       1.微软成功的原因在于管理层支持和教育与培训.       2.工程师必须对基本的安全弱点、常见的安全漏洞类型、基本的安全设计有所了解。
1508 0
|
存储 安全 编译器
[笔记]读书笔记 C++设计新思维《一》基于策略的类设计(下)
[笔记]读书笔记 C++设计新思维《一》基于策略的类设计(下)
219 0
|
存储 关系型数据库 编译器
C++ Primer Plus 第6版 读书笔记(9)第 9章 函数——内存模型和名称空间
C++ Primer Plus 第6版 读书笔记(9)第 9章 函数——内存模型和名称空间
256 1