未调用Servlet过滤器

时间:2015-04-28 00:22:56

标签: java google-app-engine servlets

我有一个过滤器设置要为特定servlet的所有请求调用(在我的情况下是帐户servlet)。这是在Google App Engine项目的上下文中。提交表单后,请求首先进入谷歌,然后他们对我的servlet进行POST,以便我可以检索上传的blob。表单操作是:

$('#list1').on("click", "li button", function() {  //listen for click on button
    $(this)  //the button that was clicked
        .closest("li")  //find the li element
        .remove();      //remove the li
});

我的过滤器映射是:

blobstoreService.createUploadUrl("/account/submit-order")

我的servlet映射是:

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

当我对应用内的帐户网址执行GET请求时,过滤器有效,但出于某种原因,来自谷歌(作为POST)的请求不会触发过滤器。有什么想法吗?

我已经验证过,如果我将表单发布到/ account / foo(将其设置为表单的操作,使用方法POST),则会触发servlet过滤器,因此过滤器正在运行,但由于某种原因, POST请求来自谷歌,直接调用servlet,并绕过过滤器。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

可能的选项

还有另一个过滤器未使用chain.doFilter()传递给链中的下一个过滤器。

[UPDATE] 刚刚发现这个类似的@BalusC post - 他还有一个选项清单。一个匹配这个,另外两个不适用。