Liferay7 BPM门户开发之36: 使用Portlet filters过滤器做切面AOP
2016-11-14 12:40
543 查看
使用Portlet filters过滤器做切面AOP
Portlet Filters定义于JSR286 Java Portlet Specification 2.0 Portlet Filters
是为了在4个生命周期的过程中,提供外部的AOP支持,这非常不显眼,但也很有用,比如可以用在Liferay的Hook开发中。
JSR286 Java Portlet Specification 2.0 的更多介绍:
http://www.ibm.com/developerworks/websphere/library/techarticles/0803_hepper/0803_hepper.html
针对不同周期的4个过滤器Portlet filters:
javax.portlet.filter.ResourceFilter - For serveResource method
javax.portlet.filter.RenderFilter - For render method
javax.portlet.filter.ActionFilter - For processAction method
javax.portlet.filter.EventFilter - For processEvent method
可以看到,这个是属于javax.portlet.filter包,而不是liferay私有的,只是liferay对JSR286的实现较完整,提供了这种过滤机制。
Portlet filters除了可以实现Hook,还能实现不修改原portlet代码前提下的扩展,核心思想就是AOP,能够在生命周期方法之后或者之前做额外动作开发。
XXXXXXFilter其实是一个接口,主要方法:
init(javax.portlet.filter.FilterConfig filterConfig)
doFilter (*Request, *Response, FilterChain chain)
我们主要是要实现doFilter方法。
用例子来说明,比如在提交操作时,不用改动原代码,嵌入一个计数器。
先要通过property = {"javax.portlet.name=Your_portlet_Name"} 定义需要监听的Portlet,这步比较关键
Portlet Filters定义于JSR286 Java Portlet Specification 2.0 Portlet Filters
是为了在4个生命周期的过程中,提供外部的AOP支持,这非常不显眼,但也很有用,比如可以用在Liferay的Hook开发中。
JSR286 Java Portlet Specification 2.0 的更多介绍:
http://www.ibm.com/developerworks/websphere/library/techarticles/0803_hepper/0803_hepper.html
针对不同周期的4个过滤器Portlet filters:
javax.portlet.filter.ResourceFilter - For serveResource method
javax.portlet.filter.RenderFilter - For render method
javax.portlet.filter.ActionFilter - For processAction method
javax.portlet.filter.EventFilter - For processEvent method
可以看到,这个是属于javax.portlet.filter包,而不是liferay私有的,只是liferay对JSR286的实现较完整,提供了这种过滤机制。
Portlet filters除了可以实现Hook,还能实现不修改原portlet代码前提下的扩展,核心思想就是AOP,能够在生命周期方法之后或者之前做额外动作开发。
XXXXXXFilter其实是一个接口,主要方法:
init(javax.portlet.filter.FilterConfig filterConfig)
doFilter (*Request, *Response, FilterChain chain)
我们主要是要实现doFilter方法。
用例子来说明,比如在提交操作时,不用改动原代码,嵌入一个计数器。
先要通过property = {"javax.portlet.name=Your_portlet_Name"} 定义需要监听的Portlet,这步比较关键
import javax.portlet.PortletException; import javax.portlet.RenderRequest; import javax.portlet.RenderResponse; import javax.portlet.filter.FilterChain; import javax.portlet.filter.FilterConfig; import javax.portlet.filter.PortletFilter; import javax.portlet.filter.RenderFilter; import org.osgi.service.component.annotations.Component; @Component( immediate = true, property = {"javax.portlet.name=Your_portlet_Name"}, service = PortletFilter.class ) public class HitCounterFilter implements RenderFilter { int count; @Override public void doFilter(RenderRequest renderRequest, RenderResponse renderResponse, FilterChain filterChain) throws IOException, PortletException { System.out.println("==============="); System.out.println("显示数: " +count); System.out.println("==============="); . . . System.out.println("Before filter"); filterChain.doFilter(renderRequest, renderResponse); System.out.println("After filter"); } @Override public void destroy() { } @Override public void init(FilterConfig filterConfig) throws PortletException { } }
相关文章推荐
- Liferay7 BPM门户开发之30: 通用帮助类Validator、ArrayUtil、StringUtil等使用
- Liferay7 BPM门户开发之13: 通用流程实现从Servlet到Portlet (Part2)
- Liferay7 BPM门户开发之14: 通用流程实现从Servlet到Portlet (Part3)
- Liferay7 BPM门户开发之28: Portlet文件上传,及实体类同步更新上传
- Liferay7 BPM门户开发之27: MVC Portlet插件工程开发
- Liferay7 BPM门户开发之33: Portlet之间通信的3种方式(session、IPC Render Parameter、IPC Event、Cookies)
- liferay 5.2.3 版本下,使用struts开发portlet
- Liferay7 BPM门户开发之1:Liferay7开发环境准备
- LifeRay Portal 6学习笔记6:使用Struts2开发Portlet
- Liferay7 BPM门户开发之17: Portlet 生命周期
- Liferay7 BPM门户开发之32: 实现自定义认证登陆(定制Authentication Hook)
- Liferay7 BPM门户开发之3: Activiti开发环境搭建
- Liferay7 BPM门户开发之25: Liferay7应用程序配置(APPLICATION CONFIGURATION)
- Liferay7 BPM门户开发之12:acitiviti和liferay用户权限体系集成
- Liferay7 BPM门户开发之6: Activiti数据库换为mysql
- Liferay7 BPM门户开发之9: 流程表单数据动态映射体系
- Liferay7 BPM门户开发之26: 集成Activiti到Liferay7
- Liferay 6.1开发学习(十四):在自己的Portlet中使用Liferay的全文检索【转】
- Liferay7 BPM门户开发之5: Activiti和Spring集成