Java 通过大气认证+;Dropwizard

Java 通过大气认证+;Dropwizard,java,dropwizard,atmosphere,Java,Dropwizard,Atmosphere,您好,我正在寻找一种方法,在用户建立WebSocket连接时对其进行身份验证,如果用户未通过身份验证,则关闭连接。我正在使用Dropwizard框架和Atmosphere进行WebSocket连接。这就是我使用的例子。 如果我能在建立连接时使用Dropwizard提供的“@Auth”注释进行身份验证,那就太好了 你是如何揭露这一点的?它是通过javascript前端实现的吗 您使用的是链接和此处描述的基于servlet的方法,而不是jersey atmosphere扩展 如果您使用基于servl

您好,我正在寻找一种方法,在用户建立WebSocket连接时对其进行身份验证,如果用户未通过身份验证,则关闭连接。我正在使用Dropwizard框架和Atmosphere进行WebSocket连接。这就是我使用的例子。
如果我能在建立连接时使用Dropwizard提供的“@Auth”注释进行身份验证,那就太好了

你是如何揭露这一点的?它是通过javascript前端实现的吗

您使用的是链接和此处描述的基于servlet的方法,而不是jersey atmosphere扩展

如果您使用基于servlet的方法,建议使用基于令牌的方法将令牌放入http头中,然后在@Ready handler方法中访问此头,如下所示:

@Ready
public String onReady(final AtmosphereResource resource) {
    String AuthHeader = resource.getRequest().getHeader("Authorization");

    ...DO AUTH HERE

    logger.info("Resource {} connected ", resource.uuid());
    return "Connect " + resource.uuid();
}
然后,如果身份验证失败,您还可以轻松地关闭连接。但是,根据客户端实现的不同,您可能需要考虑这一点。如果客户机在关闭时自动重新连接,则会出现持续关闭和打开套接字的情况,这可能会导致资源耗尽。如果auth未成功,则可以存储一个私有变量,该变量说明此实例是否经过身份验证,并且只需停止向其发送任何消息或处理来自该实例的任何消息。这也是一种让攻击者知道auth失败的“模糊”方式,它只是处于一种不确定状态;已连接,但未失败或关闭。只是没有收到任何数据。但同样,这是特定于您的实现的


Jwt auth是一个选项,请检查此选项:。我已将此实现移植到dropwizard 0.8rc3-SNAPSHOT,尽管尚未公开。如果您需要,请告诉我,我可以将其发布到github。

感谢您的回复,我最终将访问令牌添加到了标题中。正如您所说,在关闭连接之前,我会让客户端知道为什么要关闭连接。