【问题标题】:Servlet Filter not being called未调用 Servlet 过滤器
【发布时间】: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


【解决方案1】:

可能的选择

还有一个过滤器不会使用chain.doFilter() 传递到链中的下一个过滤器。

[更新] 刚刚发现这个@BalusC post 有类似的东西——他还有一个选项清单。一个符合这个,另外两个不适用。

【讨论】:

    【解决方案2】:

    引用的 BalusC 帖子中指出的第二种解决方案可能证明是有效的。在开发模式下,Blobstore 服务使用 RequestDispatcher.forward() 代替 HTTP 请求。在&lt;filter-mapping&gt; 条目中,您可以使用&lt;dispatcher&gt;REQUEST&lt;/dispatcher&gt;&lt;dispatcher&gt;FORWARD&lt;/dispatcher&gt;

    【讨论】:

      猜你喜欢
      • 2023-03-11
      • 2015-08-23
      • 2020-08-19
      • 2011-11-30
      • 1970-01-01
      • 1970-01-01
      • 2011-12-06
      • 2011-07-24
      • 1970-01-01
      相关资源
      最近更新 更多