当前位置: 首页 > 知识库问答 >
问题:

在Grizzly中连接身份验证的位置?

翟功
2023-03-14

我正在使用GrizzlyHttpServer,它注册了两个HttpHandler实例:

  • /api/*下,有一个Jersey REST风格的应用程序提供产品的api,并且
  • /*下,有一个StaticHttpHandler,它提供静态HTML/JavaScript内容(其中,与/API/

对于身份验证,我目前仅使用Jersey<code>ContainerRequestFilter

但是随着需求的变化,现在我想要求对所有到达服务器的请求进行身份验证。因此,我想将身份认证提升一个级别,从新泽西升级到灰熊。不幸的是,我完全搞不清在Grizzly中哪里可以找到一个“请求过滤器”(不管它叫什么)。有人能告诉我相关的API来完成这个任务吗?

共有2个答案

阚元白
2023-03-14

“连接”部分可以使用 Http 服务器探测器完成(使用灰熊 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 getuser principal

惠文彬
2023-03-14

最简单的解决方案是利用Grizzly嵌入式Servlet支持。

这当然意味着您需要做一些工作来将您当前的< code>HttpHandler逻辑迁移到< code>Servlet上——但是这真的不应该太困难,因为< code>HttpHandler API非常相似。

我会给出一些高水平的要点。

HttpServer server = HttpServlet.createSimpleServer(<docroot>, <host>, <port>);
// use "" for <context path> if you want the context path to be /
WebappContext ctx = new WebappContext(<logical name>, <context path>);

// do some Jersey initialization here

// Register the Servlets that were converted from HttpHandlers
ServletRegistration s1 = ctx.addServlet(<servlet name>, <Servlet instance or class name>);
s1.addMapping(<url pattern for s1>);
// Repeat for other Servlets ...

// Now for the authentication Filter ...
FilterRegistration reg = ctx.addFilter(<filter name>, <filter instance or class name>);
// Apply this filter to all requests
reg.addMapping(null, "/*");

// do any other additional initialization work ...

// "Deploy" ctx to the server.
ctx.deploy(server);

// start the server and test ...

注意:Servlet和过滤器的动态注册基于Servlet3.0API,因此如果您想了解如何处理ServletListener、init参数等信息,我建议您查看Servlet 3.0Javadocs。

注2:灰熊服务器实现与 Servlet 规范不是 100% 兼容。它不支持标准的 Servlet 注释,也不支持部署传统的 Servlet Web 应用程序归档部署。

最后,这里有使用嵌入式 Servlet API 的示例

 类似资料:
  • 问题内容: 我已经使用JAX-RS,Jersey和Grizzly编写了一个简单的REST服务器。这是我启动服务器的方式: 现在,我需要使用基本HTTP身份验证来保护资源,而且我不知道该怎么做。 如果可以更轻松地使它工作,我可以从Grizzly切换到Jetty,但是我确实很看重Grizzly提供的简单配置/启动。 我读了很多教程。他们都提到了web.xml,但是在我当前的配置中我没有一个。(我需要为

  • 我正在使用api示例中的示例Twilio java-sdk设置java Twilio连接。 对于通过web代理运行Twilio java-sdk有什么建议吗? 我使用的是apache http-client library 4.5.2

  • 我正在运行带有公开WebSocketendpoint的服务器。下面是我的: 问题是如何使用或或查询参数实现建立WS连接的身份验证? 更好的选择是避免使用Spring Security。 多谢了。

  • 身份验证 PDF版下载 企业应用中的URL链接可以通过OAuth2.0验证接口来获取员工的身份信息。 通过此接口获取员工身份会有一定的时间开销。对于频繁获取员工身份的场景,建议采用如下方案: 企业应用中的URL链接直接填写企业自己的页面地址; 员工跳转到企业页面时,企业校验是否有代表员工身份的cookie,此cookie由企业生成; 如果没有获取到cookie,重定向到OAuth验证链接,获取员工

  • 问题内容: 如何在Elasticsearch中定义安全性访问?我有elasticsearch-head插件,但是您的访问不需要任何安全性。 问题答案: 不再积极支持此答案中提到的插件。 elasticsearch中没有内置的访问控制。因此,您需要设置一个反向代理(这是一个博客文章,介绍如何设置nginx),使用第三方的Elasticsearch插件之一,例如https://github.com/A