Grizzly在哪里连接身份验证?

时间:2013-10-15 12:20:43

标签: http authentication grizzly

我使用的Grizzly HttpServer注册了两个HttpHandler个实例:

  • /api/*下有一个Jersey REST风格的应用程序,提供产品的API,
  • /*下面有一个StaticHttpHandler,它提供静态HTML / JavaScript内容(除其他外,还与/api/下的API进行对话

对于身份验证,我目前使用实施HTTP Basic Auth的Jersey ContainerRequestFilter来保护 API,这与another SO question中显示的内容非常相似。

但是随着需求的变化,现在我想要对所有请求命中服务器进行身份验证。因此,我想将身份验证提升一级,从Jersey到Grizzly。不幸的是,我完全忘记了在哪里可以连接一个"请求过滤器"在灰熊队(或其他所谓的)。有人能指出我相关的API来实现这个目标吗?

2 个答案:

答案 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