【发布时间】:2015-04-28 00:22:55
【问题描述】:
我有一个过滤器设置,要为对特定 servlet(在我的例子中是帐户 servlet)的所有请求调用。这是在 Google App Engine 项目的上下文中。提交表单后,请求首先发送到 google,然后他们对我的 servlet 进行 POST,以便我可以检索上传的 blob。表单动作是:
blobstoreService.createUploadUrl("/account/submit-order")
我的过滤器映射是:
<filter>
<filter-name>Account Servlet Filter</filter-name>
<filter-class>com.myapp.filters.AccountServletFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Account Servlet Filter</filter-name>
<servlet-name>Account Servlet</servlet-name>
</filter-mapping>
我的 servlet 映射是:
<servlet>
<servlet-name>Account Servlet</servlet-name>
<servlet-class>com.myapp.servlets.AccountActionServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Account Servlet</servlet-name>
<url-pattern>/account/*</url-pattern>
</servlet-mapping>
当我对应用程序中的帐户 URL 执行 GET 请求时,过滤器起作用,但由于某种原因,来自 google 的请求(作为 POST)没有触发过滤器。有什么想法吗?
我已经验证,如果我将表单发布到 /account/foo(将其设置为表单的操作,使用 POST 方法),将触发 servlet 过滤器,因此过滤器正在工作,但由于某种原因,当POST请求来自google,直接调用servlet,绕过过滤器。
【问题讨论】:
-
您的问题不在 web.xml 中,而可能在您的 servlet 或过滤器的代码中,您也可以发布这些吗?
-
正在调用servlet,只是过滤器没有被触发,我已经打开了断点调试。
-
我现在不知道。
-
也许你的问题是@JoD。在他/她的回答中提到,你试过吗?
-
在帐户过滤器之前应该调用另一个过滤器。我是说应该首先调用它,因为它是在定义帐户过滤器之前在 web.xml 中定义的。我打开了调试,甚至没有为来自 createUploadURL 的请求调用该过滤器。如果我将表单操作更改为直接点击 /account/foo,则会调用两个过滤器。上传 blob 后,google 调用 servlet 的方式有些奇怪。这是我能得出的唯一结论。
标签: java google-app-engine servlets