ellou 'Làm cách nào để xác thực người dùng trong WebSocket 2.0 của Play?
Tôi có phương pháp Play WebSocket chung đang hoạt động như mong đợi, nhưng tôi cần phải xác thực người dùng. Thật không may khi cố gắng thậm chí Cách đơn giản nhất để xác định người sử dụng trong phương pháp này:
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());
// ...
}
};
}
}
tôi nhận được một lỗi:
java.lang.RuntimeException: There is no HTTP Context available from here.
workaround hiện tại của tôi là phải vượt qua ngẫu nhiên, định danh duy nhất để xem và lưu nó trong mô hình tài , hơn là tôi có thể kết nối với socket từ khung nhìn và tìm người dùng với định danh đã cho, nhưng điều này không hoàn hảo vì chỉ có thể có một kết nối WebSocket cho mỗi người dùng và cũng không ngăn chặn giả mạo.
Tôi nên xác thực người dùng và ngăn chặn tấn công giả mạo bằng cách nào?
Tôi đã chỉnh sửa mẫu của mình, để vừa với mã của bạn, như bạn có thể thấy tôi đã đặt nó trong 'onReady (...)', nó trả về ngoại lệ, khi được đặt trước 'return' nó trả về null. Tất nhiên cả hai dòng ('request(). Username()' và 'Http.Context.current() ...') trả về tên người dùng hợp lệ trong hành động chung. – biesior
Bạn không có bất kỳ loại chú thích nào về các hành động phổ biến? Bạn đặt tên người dùng như thế nào? –
Cả hai hành động đều nằm trong cùng một bộ điều khiển, chú thích cho lớp Secured.class được đưa vào bộ điều khiển, chứ không phải để thao tác nên cả hai đều sử dụng chúng theo cùng một cách. Tôi nghĩ rằng vấn đề là hành động phổ biến được Http.Context và WebSocket là không. – biesior