我有一个过滤器设置要为特定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,并绕过过滤器。
答案 0 :(得分:1)
参考的BalusC帖子中指出的第二个解决方案可能证明是有效的。在开发模式下,Blobstore服务使用RequestDispatcher.forward()代替HTTP请求。在<filter-mapping>
条目中,您可以使用<dispatcher>REQUEST</dispatcher>
或<dispatcher>FORWARD</dispatcher>
。
答案 1 :(得分:0)
可能的选项
还有另一个过滤器未使用chain.doFilter()
传递给链中的下一个过滤器。
[UPDATE] 刚刚发现这个类似的@BalusC post - 他还有一个选项清单。一个匹配这个,另外两个不适用。