2010-05-07 2 views
3

J'ai besoin de personnaliser le déploiement de mon portlet liferay de sorte que les fichiers nocache.js de GWT n'obtiennent pas un jeu d'en-tête HTTP 'Expires'.Liferay: Personnaliser le fichier web.xml HeaderFilter ajouté pendant le déploiement du portlet

Mon fichier de guerre ressemble à ceci:

view.jsp 
com.foobar.MyEntryPoint/com.foobar.MyEntryPoint.nocache.js 
com.foobar.MyEntryPoint/12312312313213123123123.cache.html 
WEB-INF/web.xml 
WEB-INF/portlet.xml 
WEB-INF/liferay-portlet.xml 
... etc 

mon web.xml est à peu près vide (il suffit DisplayName)

Le déploiement cela est réécrite mon Liferay d'avoir une série de filtres à particalar:

<filter> 
    <filter-name>Header Filter</filter-name> 
    <filter-class>com.liferay.portal.kernel.servlet.PortalClassLoaderFilter</filter-class> 
    <init-param> 
     <param-name>filter-class</param-name> 
     <param-value>com.liferay.portal.servlet.filters.header.HeaderFilter</param-value> 
    </init-param> 
    <init-param> 
     <param-name>Cache-Control</param-name> 
     <param-value>max-age=315360000, public</param-value> 
    </init-param> 
    <init-param> 
     <param-name>Expires</param-name> 
     <param-value>315360000</param-value> 
    </init-param> 
</filter> 
<filter-mapping> 
<filter-name>Header Filter</filter-name> 
    <url-pattern>*.js</url-pattern> 
</filter-mapping> 

Ce filtre ajoute un en-tête Expires pour environ 2020 pour les fichiers .nocache.js js ... le problème est ces fichiers ne devrait vraiment pas être c faisait mal (l'indice est au nom :)

Pour des fins de développement, j'ai travaillé autour de ce en désactivant le filtre en utilisant:

com.liferay.portal.servlet.filters.header.HeaderFilter=false 

dans portal-ext.properties globaly. Ce que je voudrais faire est l'un des suivants:

  • Désactivez HeaderFilter uniquement pour ce fichier de portlet ou de guerre. Je peux toujours ajouter mon propre expires
  • Ajouter un init-param à l'HeaderFilter à tout correspondre à d'autres que les fichiers .nocache.js

Toute idée comment l'une de ces choses pourrait se faire?

Stack: Liferay-6.0.1 CE, Windows 7, java 1.6.0_18, GWT 2.0.3

Répondre

3

Essayez d'utiliser la regex url-pattern qui est utilisé par Liferay lui-même:

<filter> 
    <filter-name>Header Filter</filter-name> 
    <filter-class>com.liferay.portal.kernel.servlet.PortalClassLoaderFilter</filter-class> 
    <init-param> 
     <param-name>filter-class</param-name> 
     <param-value>com.liferay.portal.servlet.filters.header.HeaderFilter</param-value> 
    </init-param> 
    <init-param> 
     <param-name>url-regex-pattern</param-name> 
     <!-- the following matches everything except files ending .nocache.js --> 
     <param-value><![CDATA[^.+(?<!nocache\.js)$]]></param-value> 
    </init-param> 
    <init-param> 
     <param-name>Cache-Control</param-name> 
     <param-value>max-age=315360000, public</param-value> 
    </init-param> 
    <init-param> 
     <param-name>Expires</param-name> 
     <param-value>315360000</param-value> 
    </init-param> 
</filter> 

Si vous ajoutez ceci à votre fichier web.xml, il n'est pas ajouté deux fois au cours du déploiement ou supprimé. Je n'ai pas d'expérience avec la version 6.0 maintenant, veuillez vérifier.

Questions connexes