Portletfilter
Seit Freigabe der Spezifikation "JSR 286: Portlet Specification 2.0" haben Sie die Möglichkeit, Anforderungen und Antworten abzufangen und zu bearbeiten, bevor sie in einer bestimmten Phase an ein Portlet übergeben werden. Mit Portletfiltern können Sie die Bereitstellung eines Portlets blockieren, wenn eine bestimmte Bedingung eintritt. Außerdem können Sie Portletfilter verwenden, um eine Anforderung und eine Antwort in einem Wrapper mit Dekoratoren zu versehen und so das Verhalten des Portlets zu ändern.
Portletfilter verwenden
- Implementieren Sie eine oder mehrere der folgenden Schnittstellen des Pakets javax.portlet.filter:
- RenderFilter
- ActionFilter
- ResourceFilter
- EventFilter
- Registrieren Sie den Filter in der Datei portlet.xml für die Portlets in Ihrer Webanwendung.
package my.pkg;
import java.io.IOException;
import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.PortletException;
import javax.portlet.filter.ActionFilter;
import javax.portlet.filter.FilterChain;
import javax.portlet.filter.FilterConfig;
public class MyPortletFilter implements ActionFilter {
public void init(FilterConfig config) throws PortletException {
String myInitParameter = config.getInitParameter("myInitParameter");
// ...
}
public void doFilter(ActionRequest request, ActionResponse response,
FilterChain chain) throws IOException, PortletException {
preProcess(request, response);
chain.doFilter(request, response);
postProcess (request, response);
}
private void preProcess(ActionRequest request, ActionResponse response) {
// Erstellen Sie z. B. einen javax.portlet.filter.PortletRequestWrapper an dieser Stelle.
}
public void destroy() {
// freie Ressourcen
}
}
<?xml version="1.0" encoding="UTF-8"?>
<portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd"
version="2.0" id="demo_app_id">
<portlet>
<portlet-name>MyPortlet1</portlet-name>
<!-- [...] -->
</portlet>
<portlet>
<portlet-name>MyPortlet2</portlet-name>
<!-- [...] -->
</portlet>
<filter>
<filter-name>PortletFilter</filter-name>
<filter-class>my.pkg .MyPortletFilter</filter-class>
<lifecycle>ACTION_PHASE</lifecycle>
<init-param>
<name>myInitParameter</name>
<value>myValue</value>
</init-param>
</filter>
<filter-mapping>
<filter-name>PortletFilter</filter-name>
<portlet-name>MyPortlet1</portlet-name>
<portlet-name>MyPortlet2</portlet-name>
</filter-mapping>
</portlet-app>
- RESOURCE_PHASE
- RENDER_PHASE
- EVENT_PHASE
- ACTION_PHASE
Globale Portletfilter
Der Portletcontainer für WebSphere Application Server erweitert das Feature Portletfilter, das von der Spezifikation JSR 286 bereitgestellt wird, und ermöglicht Ihnen die globale Registrierung von Filtern. Diese globalen Filter gelten für alle Portlets, die im Portletcontainer aktiv sind, einschließlich beider einfacher Portlets und Konsolenmodule.
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.0"?>
<plugin id="portlet-filter-config" name="WS_Server" provider-name="IBM"
version="1.0.0">
<extension point="com.ibm.ws.portletcontainer.portlet-filter-config">
<portlet-filter-config class-name="my.pkg.PortletFilter" order="22000">
<description>Description of global PortletFilterImpl</description>
<lifecycle>ACTION_PHASE</lifecycle>
<lifecycle>EVENT_PHASE</lifecycle>
<lifecycle>RENDER_PHASE</lifecycle>
<lifecycle>RESOURCE_PHASE</lifecycle>
<init-param>
<name>MyInitParam1</name>
<value>MyInitValue1</value>
</init-param>
<init-param>
<name>MyInitParam2</name>
<value>MyInitValue2</value>
</init-param>
</portlet-filter-config>
</extension>
</plugin>

- Da globale Portletfilter auf alle Portlets im Container angewendet werden, ist der Rückgabewert für globale Portletfilter "0", wenn Sie die Methode FilterConfig#getPortletContext innerhalb der Methode init aufrufen.
- Verwechseln Sie dieses Feature nicht mit den Portletdokumentfiltern für WebSphere Application Server. Diese Portletdokumentfilter sind, technisch betrachtet, Servletfilter, die Sie nur auf die bereitgestellte Ausgabe anwenden können. Weitere Informationen zu den Portletdokumentfiltern finden Sie in der Dokumentation zur Konvertierung von Portletfragmenten in ein HTML-Dokument.
- Da globale Portletfilter Auswirkungen auf alle Portlets haben, die im betreffenden Portletcontainer ausgeführt werden, werden auch die Konsolenmodule, die in Integrated Solutions Console enthalten sind, gefiltert. Es ist daher wichtig, dass Sie Ihre Filterimplementierung testen, um festzustellen, ob in Konsolenmodulen oder Portlets unerwünschte Nebeneffekte auftreten. Eine Methode, dies zu tun, besteht darin, den Kontextpfad der Anforderung in Ihrer Filterlogik zu testen.