如何在运行时或应用程序启动时禁用引导过滤器?



我在我的Google向导应用程序中定义了多个过滤器。但有一种方式我可以禁用某些过滤器在运行时或者在应用程序启动?

bind(MyService.class).to(MyServiceImpl.class);
filter("/*").through(MyFilter.class);
filter("/myservlet").through(MyServletFilter.class);

上面的代码中注册了2个过滤器;我想要的是启用/禁用这些过滤器或修改过滤器链基于一些配置,如:

filters.to.disable=my.app.package.MyFilter,my.app.package.MyServletFilter

如果你有任何输入或建议,请告诉我。谢谢!

我相信没有内置的方法可以做到这一点,但是您可以创建自己的实用程序,它将接受filters.to.disable值并使用它来检查过滤器是否启用。例如:

class FilterDisabler {
private final Set<String> disabledFilterClasses;
@Inject
FilterDisabler(Set<String> disabledFilterClasses) {
this.disabledFilterClasses = disabledFilterClasses;
}
boolean isDisabled(Class<?> clz) {
return disabledFilterClasses.contains(clz.getName());
}
}
class MyFilter implements Filter {
private final FilterDisabler filterDisabler;
@Inject
MyFilter(FilterDisabler filterDisabler) {
this.filterDisabler = filterDisabler;
}
@Override
public void doFilter(
ServletRequest request,
ServletResponse response,
FilterChain chain
) throws IOException, ServletException {
if (filterDisabler.isDisabled(this.getClass())) {
chain.doFilter(request, response);
return;
}
// filter logic
}
}

最新更新