如何在Play的2.0 WebSocket中验证用户身份?

bie*_*ior 8 java authentication websocket playframework playframework-2.0

ellou"

我有常见的Play WebSocket方法,它按预期工作,但我需要验证用户身份.不幸的是,当尝试以最简单的方式识别方法中的用户时:

public class Application extends Controller {
    public static WebSocket<JsonNode> connect() {
        return new WebSocket<JsonNode>() {

            @Override
            public void onReady(final WebSocket.In<JsonNode> in, final WebSocket.Out<JsonNode> out) {
                User logged = User.findByUsername(Http.Context.current().request().username());
                // ...
            }
        };
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

java.lang.RuntimeException: There is no HTTP Context available from here.
Run Code Online (Sandbox Code Playgroud)

我目前的解决方法是传递随机的唯一标识符以查看并将其保存在用户模型中,而不是从视图连接到套接字并查找具有给定标识符的用户,但这并不完美,因为只能有一个WebSocket连接每个用户也不会阻止恶搞.

我该如何验证用户身份并防止欺骗攻击?

bie*_*ior 0

由于我想要发送的数据很敏感,在这种情况下,安全性对我来说比性能更重要,最后我使用了两步消息,首先通过消息的 WebSocket id 和一些不重要的数据发送,然后通过 AJAX 和安全操作获取用户认证后的消息正文。

问题仍然悬而未决:当然,如果还有其他建议,我会改变我的投票:)