Filtres de portlet

Depuis l'édition de JSR 286: Portlet Specification 2.0, il est possible d'intercepter et de manipuler la demande et la réponse avant leur distribution vers un portlet dans une phase donnée. En utilisant des filtres de portlet, vous pouvez bloquer le rendu d'un porlet dans un cas donné. Vous pouvez également utiliser des filtres de portlet pour décorer une demande et une réponse dans un encapsuleur pour modifier le comportement du portlet.

Utilisation des filtres de portlet

Pour pouvoir utiliser la fonction de filtre de portlet, vous devez exécuter les actions suivantes :
  • Implémenter une ou plusieurs des interfaces suivantes du package javax.portlet.filter :
    • RenderFilter
    • ActionFilter
    • ResourceFilter
    • EventFilter
    Vous devez implémenter le filtre approprié en fonction de la méthode ou de la phase du portlet à filtrer.
  • Enregistrez le filtre dans le fichier portlet.xml pour les portlets de votre application Web
L'exemple de code suivant montre un filtre de portlet pour filtrer la méthode processAction d'un portlet :
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) {
          //Par exemple, créer un javax.portlet.filter.PortletRequestWrapper ici
     }

     public void destroy() {
          // libérer les ressources
     }
}
L'exemple de code suivant montre comment déclarer le filtre de portlet précédent dans le fichier portlet.xml :
<?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>
Si vous implémentez l'interface RenderFilter, par exemple, ajoutez le code <lifecycle>RENDER_PHASE</lifecycle> à la section de filtrage. Cet ajout est analogue aux autres interfaces de filtrage. Les valeurs suivantes sont valides pour le paramètre <lifecycle> :
  • RESOURCE_PHASE
  • RENDER_PHASE
  • EVENT_PHASE
  • ACTION_PHASE

Filtres de portlet globaux

Le conteneur de portlet pour WebSphere Application Server étend la fonction de filtre de portlet fournie par JSR 286 pour vous permettre d'enregistrer des filtres à un niveau global. Ces filtres globaux s'appliquent à tous les portlets exécutés dans le conteneur de portlet, y compris aux portlets ordinaires et aux modules de console.

Pour utiliser des filtres de portlet globaux, ajoutez le code suivant au dossier racine du fichier Java™ archive (JAR) ou dans le répertoire WEB-INF de l'application Web et appelez-le plugin.xml :
<?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>
L'attribut order de l'élément portlet-filter-config définit à quel moment de la chaîne de filtres exécuter le filtre. Plus la valeur est élevée, plus le filtre est exécuté tard dans la chaîne de filtrage. Des filtres globaux sont déclenchés avant les filtres de portlet locaux.
Eviter les incidents Eviter les incidents:
  • Comme les filtres de portlet globaux s'appliquent à tous les portlets dans le conteneur, lorsque vous appelez la méthode FilterConfig#getPortletContext dans la méthode init, la valeur de retour est null pour les filtres de portlet globaux.
  • Ne confondez pas cette fonction avec les filtres de document de portlet de WebSphere Application Server. Ces filtres sont, d'un point de vue technique, des filtres de servlet que vous pouvez appliquer à une sortie de rendu uniquement. Pour plus d'informations sur les filtres de document de portlet, voir la documentation sur la conversion des fragments de portlet en document HTML.
  • Comme les filtres de portlet globaux affectent tous les portlets exécutés dans le conteneur de portlet défini, les modules de console qui se trouvent dans la console ISC (Integrated Solutions Console) sont également filtrés. Il est important de tester l'implémentation de filtre pour identifier les conséquences indésirables sur les modules de console ou les portlets. Une méthode de test consiste à vérifier le chemin de contexte de la demande dans la logique du filtre.
gotcha

Icône indiquant le type de rubrique Rubrique de concept



Icône d'horodatage Dernière mise à jour: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cport_portlet_filters
Nom du fichier : cport_portlet_filters.html