Sun Java System Portal Server 7.2 Developer's Guide

ProcedureTo Write a Portlet Filter

  1. Write a filter class.

    A filter class should implement one or more of the above mentioned four interfaces and should provide a no argument public constructor. The filter class should also override the init() and destroy() methods of the javax.portlet.filter.PortletFilter interface.


    public class HitCounterFilter implements RenderFilter {
          private FilterConfig filterConfig = null;
          public void init(FilterConfig filterConfig) throws PortletException {
           this.filterConfig = filterConfig;
       }
          public void doFilter(RenderRequest renderRequest, RenderResponse renderResponse, FilterChain filterChain) throws IOException, PortletException {
              . . .
           StringWriter sw = new StringWriter();
           PrintWriter writer = new PrintWriter(sw);
           . . .
           writer.println();
           writer.println("===============");
           writer.println("The number of hits is: " +count);
           writer.println("===============");
           . . .
           filterChain.doFilter(renderRequest, renderResponse);
       }
          public void destroy() {
       }
       }
  2. Add the following XML fragments in the portlet.xml files after you write the portlet filter class.


    <portlet-app xmlns="http://java.sun.com/xml/ns/portlet/
                 portlet-app_2_0.xsd"             
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"             
                 xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/
                 portlet-app_2_0.xsd
                 http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd"
    id="myPortletApp" version="2.0">
    <portlet>
    ...
    	<filter>
    		<filter-name>HitCounterRenderFilter</filter-name>
    		<filter-class>com.sun.portal.portlet.filter
         .HitCounterFilter</filter-class>
    		<lifecycle>RENDER_PHASE</lifecycle>
    	</filter>
    
    	<filter-mapping>
    		<filter-name>HitCounterRenderFilter</filter-name>
    		<portlet-name>HelloWorld</portlet-name>
    	</filter-mapping>
    
    </portlet-app>