Как применить фильтр сервлетов при непосредственном обслуживании HTML-страницы? - PullRequest
4 голосов
/ 05 мая 2010

Во-первых, я использую Google AppEngine и Guice, но подозреваю, что моя проблема не связана с ними.

Когда пользователь подключается к моему (GWT) веб-приложению, URL-адрес представляет собой прямую HTML-страницу. Например, в режиме разработки это: http://127.0.0.1:8888/Puzzlebazar.html?gwt.codesvr=127.0.0.1:9997. Теперь я настроил web.xml следующим образом:

<?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>

И мой appengine-web.xml:

<?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>

Поскольку я использую Guice, мне нужно настроить дополнительные фильтры в моем ServletModule, где я делаю это:

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

Но мой SecurityCookieFilter.doFilter никогда не называется. Я пробовал что-то вроде "*.html*" или <url-pattern>*</url-pattern>, но безрезультатно. Есть идеи, как мне это сделать?

Ответы [ 2 ]

3 голосов
/ 05 мая 2010

Вы, вероятно, настроили HTML-файлы, которые будут отображаться как статический контент в вашем appengine-web.xml. Статическая обработка файлов вообще не затрагивает ваше приложение, поэтому вы не можете фильтровать вывод.

1 голос
/ 23 февраля 2016

Если вам нужно (как и мне) заставить GAE добавить определенные заголовки HTTP-ответа для статических файлов HTML, вы можете сделать это, объявив их как статический ресурс в appengine-web.xml следующим образом:

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

Я нашел это в документации GAE

...