如何在ServletModule.configureServlets中注册过滤器时排除URL?

时间:2013-07-15 14:15:04

标签: java guice sitebricks

我使用sitebricks在Google App Engine上构建RESTful API。我为GuiceCreator中的所有/ rest / *网址注册了两个过滤器。 如何使用filter("/rest/*)语法但排除一个特定的网址?我希望/ rest / *下的所有内容都被过滤掉,但/ rest / 1 / foo除外。

我可以枚举所有实际需要过滤的网址。但明显的缺点是,如果我决定添加或删除端点,将很难维护。

new ServletModule() {
    @Override
    protected void configureServlets() {
        filter("/rest/*").through(ObjectifyFilter.class);
        filter("/rest/*").through(SomeOtherFilter.class);
    }
}

我正在寻找像

这样的结构
filter("/rest/*").exclude("/rest/1/foo").through(ObjectifyFilter.class).

1 个答案:

答案 0 :(得分:0)

Thanks to dhanji,我使用filterRegex()代替filter()修复此问题。在我的正则表达式中,我使用的是negative lookbehind assertion。这会过滤除/rest/.*以<{1}}结尾的所有/[0-9]/foo个网址。

new ServletModule() {
  @Override
  protected void configureServlets() {
    filter("^/rest/.*(?<!/\\d/foo)$").through(ObjectifyFilter.class);
    filter("^/rest/.*(?<!/\\d/foo)$").through(SomeOtherFilter.class);
  }
}