我有一个过滤器设置,用于调用对特定servlet的所有请求(在我的例子中是帐户servlet)。这是在谷歌应用引擎项目的背景下进行的。提交表单时,请求首先转到google,然后他们向我的servlet发送一个post,这样我就可以检索上传的blob。动作形式为:
blobstoreService.createUploadUrl("/account/submit-order")
我的筛选器Map是:
<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>
我的servletMap是:
<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,并绕过过滤器。
2条答案
按热度按时间91zkwejq1#
参考的balusc公告中指出的第二种解决方案可能被证明是有效的。在开发模式下,blobstore服务使用requestdispatcher.forward()代替http请求。在
<filter-mapping>
您可以使用的条目<dispatcher>REQUEST</dispatcher>
或者<dispatcher>FORWARD</dispatcher>
.lnlaulya2#
可能的选择
还有另一个过滤器不使用传递到链中的下一个过滤器
chain.doFilter()
.[更新]刚找到这个@balusc的帖子,他也有一个选项清单。一个与此匹配,另两个不适用。