Dropwizard 为所有资源添加响应过滤器

Igo*_*gor 5 java dropwizard

如何向我的Dropwizard应用程序添加过滤器,以验证每个资源返回的响应?

我应该使用javax.servlet.Filter还是javax.ws.rs.container.ContainerResponseFilter

任何与其用途有关的示例将不胜感激。

Nam*_*man 5

为所有资源添加响应过滤器,您可以执行以下操作:

  1. 创建一个扩展的 CustomFilter javax.servlet.Filter-

    public class CustomFilter implements Filter {
    
        public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
            // your filtering task
            chain.doFilter(req, res);
        }
    
        public void init(FilterConfig filterConfig) {
        }
    
        public void destroy() {
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 然后将相同的内容注册到您的Service扩展中Application-

    public class CustomService extends Application<CustomConfig> { //CustomConfig extend 'io.dropwizard.Configuration'
    
      public static void main(String[] args) throws Exception {
        new CustomService().run(args);
      }
    
      @Override
      public void initialize(Bootstrap<CustomConfig> someConfigBootstrap) {
        // do some initialization
      }
    
      @Override
      public void run(CustomConfig config, io.dropwizard.setup.Environment environment) throws Exception {
        ... // resource registration
        environment.servlets().addFilter("Custom-Filter", CustomFilter.class)
            .addMappingForUrlPatterns(java.util.EnumSet.allOf(javax.servlet.DispatcherType.class), true, "/*");
      }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 您现在应该可以使用CustomFilter上面定义的过滤所有资源了。