如何将过滤器与 Google App Engine 的 app.yaml 中的 servlet 相关联?

Posted

技术标签:

【中文标题】如何将过滤器与 Google App Engine 的 app.yaml 中的 servlet 相关联?【英文标题】:how to associate a filter to a servlet in app.yaml for Google App Engine? 【发布时间】:2013-11-02 11:35:03 【问题描述】:

对于我的应用引擎应用程序,我想将一个 servlet 分配给一个 url 模式,但还要设置 Objectify 过滤器,如下所述:https://code.google.com/p/objectify-appengine/wiki/Setup。

在我的 app.yaml 我有

handlers:
  - url: /v1/*
    name: v1
    servlet: org.restlet.ext.servlet.ServerServlet
    ...etc...

这很好地将请求路由到我的 servlet,但我不知道如何安排 Objectify 过滤器在 servlet 正在处理的相同请求上运行。

GAE docs 表示“过滤器是一个像 servlet 一样作用于请求的类,但可能允许使用其他过滤器或 servlet 继续处理请求。”

好的,好的,这就是我想要的。但文档也说“单个 URL 映射可以包含过滤器或 servlet,但不能同时包含两者。”

那么...我该怎么做呢?

【问题讨论】:

【参考方案1】:

过滤器在 servlet 之前运行,它们不是独占的。通常,对于一个请求,所有过滤器都会运行,然后会选择并执行给定 Url 的一个 servlet。

在您的 yaml 中创建一个新的过滤器部分:

handlers:
  - url: /v1/*
    name: v1
    servlet: org.restlet.ext.servlet.ServerServlet
  - url: /*    
    name: ObjectifyFilter
    filter: com.googlecode.objectify.ObjectifyFilter

注意:最好在所有请求上运行 ObjectifyFilter(url:/*),以确保始终初始化 objectify。

【讨论】:

所以基本上如果我使用 app.yaml,我需要建立一个人工层次结构,将 servlet 映射的 URL 置于过滤器映射的 URL 之下?在我的例子中,将使用 Objectify 的唯一请求是映射到 Restlet servlet 的请求。或者我想我可以回退到使用 web.xml,它支持将过滤器映射到 servlet。 (编辑了示例 yaml)不,这是平的。只需创建一个带有映射到过滤器的新 url 部分。 知道了,谢谢。对于那些想知道的人,可以为 servlet 和过滤器指定相同的 url 模式(例如,将 Peter 的答案中的第二个 url 模式更改为“- url /v1/*”)

以上是关于如何将过滤器与 Google App Engine 的 app.yaml 中的 servlet 相关联?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Google App Engine 的 app.yaml 文件中配置 servlet 过滤器?

如何使用 Google Cloud SQL 第二代按主机过滤 App Engine 连接? (第 2 次)

如何将 AJAX 与 Google App Engine (Python) 结合使用

Google App Engine Search API 自定义评分

将 JWT 与 Google App Engine 结合使用

将Google App Engine与Javascript客户端连接