gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:56:12 25 4
gpt4 key购买 nike

你好

我有按预期工作的通用 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());
// ...
}
};
}
}

我得到一个错误:

java.lang.RuntimeException: There is no HTTP Context available from here.

我目前的解决方法是传递随机的、唯一的标识符来查看并将其保存在用户模型中,这样我就可以从 View 连接到套接字并找到具有给定标识符的用户,但这并不完美,因为只能每个用户一个 WebSocket 连接,也不能防止欺骗。

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

最佳答案

我不知道你的代码是从哪里来的,但你应该能够在 Websocket 初始化(第一次连接)时访问 HTTP 请求,即你应该只在启动时才能检查身份验证websocket 套接字连接(后续调用将不会使用 HTTP,这是 Webscokets 的工作方式)。

例如,在你的 Controller 中,你可以有这样的东西:

public class Application extends Controller {

public static WebSocket<JsonNode> connect() {

Logger.info("Username from request = " + request().username());

return new WebSocket<JsonNode>() {

@Override
public void onReady(final WebSocket.In<JsonNode> in, final WebSocket.Out<JsonNode> out) {
// ....

}

};
}

}

关于java - 如何在 Play 的 2.0 WebSocket 中验证用户身份?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10485205/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com