我想在 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/