我使用的Grizzly HttpServer
注册了两个HttpHandler
个实例:
/api/*
下有一个Jersey REST风格的应用程序,提供产品的API,/*
下面有一个StaticHttpHandler
,它提供静态HTML / JavaScript内容(除其他外,还与/api/
下的API进行对话对于身份验证,我目前使用实施HTTP Basic Auth的Jersey ContainerRequestFilter
来保护仅 API,这与another SO question中显示的内容非常相似。
但是随着需求的变化,现在我想要对所有请求命中服务器进行身份验证。因此,我想将身份验证提升一级,从Jersey到Grizzly。不幸的是,我完全忘记了在哪里可以连接一个"请求过滤器"在灰熊队(或其他所谓的)。有人能指出我相关的API来实现这个目标吗?
答案 0 :(得分:3)
最简单的解决方案是利用Grizzly嵌入式Servlet支持。
这当然意味着您需要做一些工作才能将当前的HttpHandler
逻辑迁移到Servlet
s - 但这真的不应该像{{1}那样太难API非常相似。
我会在这方面给出一些高分。
HttpHandler
注意:Servlet和过滤器的动态注册基于Servlet 3.0 API,因此如果您需要有关如何处理Servlet监听器,init参数等的信息,我建议您查看Servlet 3.0 javadoc。
注2:Grizzly Servlet实现与Servlet规范不是100%兼容。它不支持标准的Servlet注释,也不支持部署传统的Servlet Web应用程序存档部署。
最后,有一些使用嵌入式Servlet API here
的示例答案 1 :(得分:0)
“hookup”部分可以使用HttpServerProbe完成(使用Grizzly 2.3.5测试):
srv.getServerConfiguration().getMonitoringConfig().getWebServerConfig()
.addProbes(new HttpServerProbe.Adapter() {
@Override
public void onRequestReceiveEvent(HttpServerFilter filter,
Connection connection, Request request) {
...
}
@Override
public void onRequestCompleteEvent(HttpServerFilter filter,
Connection connection, Response response) {
}
});
对于ContainerRequestFilter的“链接”,您可能需要查看我的问题: UnsupportedOperationException getUserPrincipal