如何在web.xml中过滤除请求app engine dev控制台之外的所有内容

时间:2012-05-17 10:54:19

标签: java google-app-engine jersey servlet-filters web.xml

我想过滤所有对我的球衣servlet的请求,所以我这样做:

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

不幸的是,这有捕捉开发控制台的副作用(http:// localhost:8888 / _ah / admin)

有没有办法可以从过滤器中排除匹配“/ _ah / *”的路径?

或许是一种更好的方法来实现同样的目标?

2 个答案:

答案 0 :(得分:4)

感谢@adarshr的建议,我开始考虑扩展Jersey过滤器servlet,以便我可以跳过某些路径。然后我意识到它已经支持忽略作为init参数的路径。

<init-param>
    <param-name>com.sun.jersey.config.property.WebPageContentRegex</param-name>
    <param-value>/(js|css|(WEB-INF/jsp)|_ah)/.*</param-value>
</init-param>

(在没有阅读它的情况下从某个地方粘贴代码后我甚至已经使用它了!)

答案 1 :(得分:1)

我建议有一个servlet,您可以使用它来配置所有过滤器映射。因此,servlet将处理所有查询并相应地重新路由它们,因为web.xml不允许正则表达式映射。

我们使用Google Guice的guiceServlet做同样的事情:

然后在configureServlets中我们执行以下操作:

  serveRegex("/(?!_ah).*").with(JerseyGateway.class);

有关此主题的一些建议,您可以查看here