java - 在dropwizard中授权

标签 java jersey dropwizard

我想在 0.8.0-rc3-SNAPSHOT 中使用 dropwizard 制作一个小应用程序。因为我希望如果任何用户调用我的 api,用户应该在 header 部分传递一个 authtoken。到目前为止我所做的是 ---

@Override
public void run(HelloWorldConfigurationhelloWorldConfiguration,Environment environment) throws Exception{
environment.jersey().register(new ViewResource());      
environment.servlets().addFilter("MyCustomRequestFilter", new MyCustomRequestFilter())
            .addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST),false, "/*");
}

public class MyCustomRequestFilter implements ContainerRequestFilter {
@Override
public ContainerRequest filter(ContainerRequest request) {
    System.out.print("test");
    if ( request.getQueryParameters().containsKey("validateMeParam") ) {
              /* validation logic */
    }
    // finished validation
    return request;
}
}

我不知道我做错了什么。它不起作用。

最佳答案

ContainerRequestFilter 不是 Servlet Filter,这是您通过执行 environment.servlets().addFilter 所假设的。这应该添加到 Jersey 配置中。

environment.jersey().register(MyCustomRequestFilter.class);

并且不要忘记过滤器类上的 @Provider 注释。

  • Jersey Filters 中查看有关过滤器的更多信息在 Dropwizard 文档中。

更新

我看到另一个严重的问题。你说你正在使用 Dropwizard 0.8.0,它使用 Jersey 2。在这种情况下,你发布的 ContainerRequestFilter 甚至不应该存在。在 Jersey 1 中,filter 方法的参数是 ContainerRequest,而在 Jersey 2 中,参数是 ContainerRequestContext。请向您显示依赖项,并验证您上面的类是实际类

关于java - 在dropwizard中授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28950415/

相关文章:

java - 运行现有 spring boot gradle 项目时出现问题

java - 如何查看在 docker 容器内运行的 log4j 日志?

jpa-2.0 - 使用 JAXB 进行灵活编码

java - 如何使用 REST Angular 在循环中发出一系列请求

java - 如何在Java中使用Dropwizard获取swagger.json

java - 如何测量 Apache Storm 中线程之间的运行时间?

java - javadoc 对算法工作原理的解释应该有多深入?

java - 通用类未找到异常

java - 来自 Java 应用程序客户端的 Jersey POST 请求

java - Dropwizard 不接受 pojo 对象的 @PathParam