Spring Boot Sicherheit mit Vaadin Login

8

Ich versuche eine Anwendung zu erstellen, die auf Spring Boot (1.2.7.RELEASE) und Vaadin (7.6.3) basiert. Mein Problem ist, dass ich Spring Security nicht mit Vaadin integrieren kann. Ich möchte eine benutzerdefinierte Vaadin LoginScreen und Spring Security Control. Mein Projekt-Setup ist wie folgt:

%Vor%

Und hier ist meine Vaadin Login-Benutzeroberfläche

%Vor%

Wenn ich meine Anwendung starte, leitet Spring mich auf meine Login-Benutzeroberfläche um, was in Ordnung ist.

Aber ich weiß nicht, wie ich den Benutzer gegen den Federsicherheitsmechanismus authentifizieren und an meine Hauptbenutzerschnittstelle senden kann.

Ich habe auch das Problem mit csrf-Tokens, wenn ich csrf nicht deaktiviere, bekomme ich das crfs-Token als Null-Ausnahme. Ich habe viele Beispiele gefunden, die mit diesen Problemen umgehen, aber es gibt keine Lösung mit Vaadin.

Danke für die Hilfe.

    
J. S. 10.03.2016, 09:29
quelle

2 Antworten

21

Nach einer Woche des Kampfes und der Forschung konnte ich das zum Laufen bringen. Es war sehr anstrengend, da es viele Informationen und Lösungen im Internet gab, von denen die meisten eine xml-basierte Konfiguration oder eine JSP-basierte Anmeldung verwendeten. Bis jetzt konnte ich keine andere Lösung ohne XML-Konfigurationsdatei finden, die das Vaadin-Framework verwendet benutzerdefinierte Anmeldeseite.

Ich kann nicht garantieren, dass dies die beste Vorgehensweise oder die einfachste Lösung ist. Außerdem habe ich nicht jeden Teil davon ausgewertet, der Login-Mechanismus funktioniert soweit ich sehen kann, aber vielleicht könnte es einige Probleme geben, die ich noch nicht entdeckt habe.

Vielleicht hilft es jemandem, der das gleiche Problem hat, also werde ich hier meine Antwort posten.

Zuerst meine securityConfig:

%Vor%

Sie müssen crsf deaktivieren, aber das ist kein Problem, da vaadin einen eigenen crsf-Schutz hat.

Außerdem müssen Sie einige URIs erlauben, damit Vaadin auf seine Ressourcen zugreifen kann: /VAADIN/** ist absolut notwendig, ich würde auch empfehlen, /vaadinServlet/** , /PUSH/** und /HEARTBEAT/** zuzulassen, aber es hängt davon ab, welche Teile von Vaadin du benutzt.

Zweitens mein UserDetailsService :

%Vor%

Die DaoAuthenticationProvider verwendet die Methode UserDetails ' loadUserByUserName , um ein Objekt einer Klasse zu erhalten, das die Schnittstelle UserDetails implementiert. Beachten Sie, dass jedes in UserDetailsInterface beschriebene Attribut nicht null sein darf, andernfalls erhalten Sie NullPointerException später von DaoAuthenticationProvider geworfen.

Ich habe eine JPA-Entity erstellt, die die UserDetails-Schnittstelle implementiert:

%Vor%

Zusätzlich die Autoritätseinheit:

%Vor%

Offensichtlich müssen Sie zuerst einige Benutzerdaten in der Datenbank speichern, bevor die Authentifizierung funktioniert.

In Vaadin konnte ich nicht funktionieren, indem ich eine Benutzeroberfläche mit verschiedenen Ansichten verwendete, also benutzte ich zwei UIs für die Anmeldung und eine für die Hauptanwendung.

In Vaadin konnte ich den URI-Pfad in der Klassenannotation setzen:

%Vor%

Mit dieser Konfiguration ist mein Anmeldebildschirm unter localhost:port/login verfügbar und meine Hauptanwendung bei localhost:port/main .

Ich logge den Benutzer programmatisch innerhalb einer button.click-Methode in meinem loginUI ein:

%Vor%

Ich hoffe, es hat einigen von euch geholfen.

    
J. S. 22.03.2016, 10:23
quelle
3

Als Alternative zu diesem Ansatz können Sie sich auch auf vaadin4spring , eine 'inoffizielle' Reihe von Erweiterungen für die weitere Integration von Vaadin und Frühling .

Gegenwärtig gibt es zwei Möglichkeiten Spring Security zu integrieren, die gut zu funktionieren scheinen (sogar Wenn sie nicht für Sie arbeiten, sollten Ihnen die Codebeispiele genügend Einblicke geben, um benutzerdefinierten Integrationscode zu schreiben.

    
Roland Ewald 06.02.2017 14:08
quelle