未调用servlet筛选器

0wi1tuuw  于 2021-07-09  发布在  Java
关注(0)|答案(2)|浏览(312)

我有一个过滤器设置,用于调用对特定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,并绕过过滤器。

91zkwejq

91zkwejq1#

参考的balusc公告中指出的第二种解决方案可能被证明是有效的。在开发模式下,blobstore服务使用requestdispatcher.forward()代替http请求。在 <filter-mapping> 您可以使用的条目 <dispatcher>REQUEST</dispatcher> 或者 <dispatcher>FORWARD</dispatcher> .

lnlaulya

lnlaulya2#

可能的选择
还有另一个过滤器不使用传递到链中的下一个过滤器 chain.doFilter() .
[更新]刚找到这个@balusc的帖子,他也有一个选项清单。一个与此匹配,另两个不适用。

相关问题