2010-05-05 3 views
3

Tout d'abord, j'utilise Google AppEngine et Guice, mais je soupçonne que mon problème n'est pas lié à ceux-ci.Comment appliquer un filtre de servlet lors de la diffusion directe d'une page HTML?

Lorsque l'utilisateur se connecte à ma webapp (GWT), l'URL est une page html directe. Par exemple, en mode développement, il s'agit de: http://127.0.0.1:8888/Puzzlebazar.html?gwt.codesvr=127.0.0.1:9997. Maintenant, je configurer mon web.xml de la manière suivante:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
version="2.5"> 
<display-name>PuzzleBazar</display-name> 

<!-- Default page to serve --> 
<welcome-file-list> 
    <welcome-file>Puzzlebazar.html</welcome-file> 
</welcome-file-list> 


<filter> 
    <filter-name>guiceFilter</filter-name> 
    <filter-class>com.google.inject.servlet.GuiceFilter</filter-class> 
</filter> 

<filter-mapping> 
    <filter-name>guiceFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

<!-- 
    This Guice listener hijacks all further filters and servlets. Extra 
    filters and servlets have to be configured in your 
    ServletModule#configureServlets() by calling 
    serve(String).with(Class<? extends HttpServlet>) and 
    filter(String).through(Class<? extends Filter) 
--> 
<listener> 
    <listener-class>com.puzzlebazar.server.guice.MyGuiceServletContextListener 
    </listener-class> 
</listener> 

</web-app> 

Et mon appengine-web.xml est:

<?xml version="1.0" encoding="utf-8"?> 
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> 
    <application>puzzlebazaar</application> 
    <version>1</version> 
    <sessions-enabled>true</sessions-enabled> 

    <!-- Configure java.util.logging --> 
    <system-properties> 
     <property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/>  
    </system-properties> 

</appengine-web-app> 

Depuis que je suis en utilisant Guice, je dois configurer des filtres supplémentaires dans mon ServletModule, où je fais ceci:

filter("*.html").through(SecurityCookieFilter.class); 

Mais mon SecurityCookieFilter.doFilter n'est jamais appelé. J'ai essayé des choses comme "*.html*" ou <url-pattern>*</url-pattern> mais en vain. Une idée de comment je devrais faire ça?

+0

Je trouve que cela fonctionne par le passage à un « .jsp » au lieu d'un « .html ». –

Répondre

3

Vous avez probablement configuré les fichiers html en tant que contenu statique dans votre appengine-web.xml. La diffusion de fichiers statiques n'implique pas du tout votre application, donc vous ne pouvez pas filtrer la sortie.

+0

Merci. J'ai ajouté le fichier appengine-web.xml là-bas. Quelque chose manque? –

+0

Il semble que votre code HTML soit utilisé comme un fichier statique, et comme je le dis, cela signifie qu'il ne touche pas du tout votre code. Vous devez créer une servlet qui sert vos fichiers si vous voulez qu'ils soient post-traitables. –

1

Si votre besoin se trouve être (comme le mien) pour faire GAE ajouter certains en-têtes de réponse HTTP pour les fichiers HTML statiques, vous pouvez le faire en les déclarant comme ressource statique dans appengine-web.xml comme ceci:

<static-files> 
    <include path="/my_static-files" > 
    <http-header name="Access-Control-Allow-Origin" value="http://example.org" /> 
    </include> 
</static-files> 

Je trouve cela dans le GAE documentation

+0

Bravo pour cela, car cela peut sauver beaucoup d'ennuis aux gens. Malheureusement pour moi, c'est un peu timide de parfait car je veux une redirection de 301 domaines (du www au nu), donc s'ils soutenaient un attribut de domaine comme ils le font un chemin, il aurait été parfait (serait servir l'en-tête Emplacement). mais AFAIK (et après avoir lu le reste des docs) ce n'est pas possible –

Questions connexes