ellou 'Play'in 2.0 WebSocket'ında nasıl kullanıcı kimliğini doğrulayabilirim?
Beklendiği gibi çalışmakta olan yaygın Play WebSocket yöntemim var, ancak kullanıcının kimliğini doğrulamam gerekiyor. yönteminde kullanıcıyı tanımlamak için bile en basit yolu çalışırken maalesef:
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());
// ...
}
};
}
}
bir hata alıyorum:
java.lang.RuntimeException: There is no HTTP Context available from here.
Benim şu anki geçici çözüm görüntülemek için rastgele, benzersiz bir tanımlayıcı geçmektir ve Kullanıcı modelinde kaydederek Bence sokete görüş açılışı yapabildiğim ve kullanıcı tarafından verilen tanımlayıcıyı bulabildiğimden, ancak kullanıcı başına sadece bir WebSocket bağlantısı olabileceğinden ve aynı zamanda sahteciliği önlemediği için bu mükemmel değildir.
Kullanıcı kimliğini nasıl doğrulamalıyım ve parodi saldırıyı nasıl önleyebilirim?
Örneğimi, kodunuza uyacak şekilde düzenledim, gördüğünüz gibi 'onReady (...)' içine yerleştirdim, 'return''den önce yerleştirildiğinde, null döndürür, özel durumu döndürür. Tabii ki her iki satır ('request(). Username()' ve benim 'Http.Context.current() ...') ortak eylemde geçerli kullanıcı adı döndürür. – biesior
Ortak eylemlerinizde herhangi bir ek açıklama yok mu? Kullanıcı adını nasıl ayarlıyorsunuz? –
Her iki eylem de aynı denetleyicide, Secured.class için not eki denetleyiciye eklenir, eylemde bulunmaz, böylece her ikisi de aynı şekilde kullanılmalıdır. Sorun şu ki ortak hareket Http.Context ve WebSocket almıyor. – biesior