ellou 'Wie kann ich Benutzer in Play 2.0 WebSocket authentifizieren?
Ich habe gemeinsame Play WebSocket-Methode, die wie erwartet funktioniert, aber ich muss Benutzer authentifizieren. Leider, wenn auch einfachste Art und Weise versuchen, Benutzer in dem Verfahren zu identifizieren:
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());
// ...
}
};
}
}
ich einen Fehler:
java.lang.RuntimeException: There is no HTTP Context available from here.
Meine aktuelle Problemumgehung ist zufällig, eindeutige Kennung es in User-Modell anzuzeigen passiert und Speicher , als ich aus der Sicht mit dem Socket verbinden und Benutzer mit der angegebenen Kennung finden kann, aber das ist nicht perfekt, da es nur eine WebSocket-Verbindung pro Benutzer geben kann und die Spoof auch nicht verhindert.
Wie soll ich den Benutzer authentifizieren und einen Spoof-Angriff verhindern?
Ich habe mein Beispiel bearbeitet, um Ihren Code anzupassen, wie Sie sehen können, habe ich es in 'onReady (...)' platziert, es gibt die Ausnahme zurück, wenn es vor 'return' gestellt wird, gibt es null zurück. Natürlich geben beide Zeilen (Ihre 'request(). Username()' und meine 'Http.Context.current() ...') einen gültigen Benutzernamen in der gemeinsamen Aktion zurück. – biesior
Haben Sie keine Anmerkungen zu häufigen Aktionen? Wie stellst du den Benutzernamen ein? –
Beide Aktionen sind in der gleichen Controller, Annotation für die Secured.class ist in der Steuerung enthalten, nicht zur Aktion, also sollten beide sie auf die gleiche Weise verwenden. Ich denke, das Problem ist, dass gemeinsame Aktion Http.Context und WebSocket ist nicht. – biesior