【问题标题】:Servlet filters not working with AppEngine manual scalingServlet 过滤器不适用于 AppEngine 手动缩放
【发布时间】:2017-01-13 21:11:56
【问题描述】:

我正在使用带有 java 的 Google AppEngine。 我已通过在 appengine-web.xml 中添加以下内容来配置手动缩放

<manual-scaling>
    <instances>1</instances>
</manual-scaling>

但是在我添加这个之后,我无法在 web.xml 中使用具有以下映射的 servlet 过滤器。

<filter>
    <filter-name>testFilter</filter-name>
    <filter-class>com.fms.test.TestFilter</filter-class> 
</filter>
<filter-mapping>
    <filter-name>testFilter</filter-name>
    <url-pattern>/_ah/api/*</url-pattern>  
    <url-pattern>/_ah/spi/*</url-pattern>  
</filter-mapping>

如果我将 * 作为 url 模式,过滤器将起作用,但这不是我的要求。如果没有手动缩放,它可以按预期工作。

谁能告诉我为什么我不能用它?

PS:我在开发环境中,使用 AppEngine SDK 1.9.42 版

这是我的过滤代码:

public class TestFilter implements Filter { 
    private static final AdvocacyUtils utils = AdvocacyUtils.getInstance();

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("Request filtered.");
    }

    @Override
    public void destroy() {
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException { 
    }
}

【问题讨论】:

  • 你能添加你想要挂钩的servlet映射吗?您是在开发环境还是生产环境中尝试?
  • 没有 servlet,只有过滤器。我添加了映射。我使用术语“servlet 过滤器”来避免与其他人混淆。我在开发环境中。
  • 但是过滤器需要hook哪个服务呢?你配置的 url-pattern 是和一个 http 端点相关的,那么它的声明在哪里呢?
  • 我用过滤器的源代码更新了问题。 @DevilingMaster 这就是你所说的声明吗? /_ah/api/* 是 API 的 Google Cloud Endpoint 网址

标签: java google-app-engine servlet-filters


【解决方案1】:

我找到了一些解决方法 (here) 解决方案是添加到“filter-mapping”附加部分 - “dispatcher”,就像在这个 sn-p 中一样:

<filter-mapping>
    <filter-name>ObjectifyFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>INCLUDE</dispatcher>
    <dispatcher>FORWARD</dispatcher>
</filter-mapping>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-07
    • 2012-12-20
    • 2015-05-15
    • 2016-06-09
    • 1970-01-01
    • 2012-05-04
    • 2016-01-20
    • 2022-08-09
    相关资源
    最近更新 更多