2016-04-21 10 views
1

Ich habe überall nachgedacht, wie ich Spring Security basierend auf einem Container Managed Security Model implementieren kann. In meinem Testfall verwende ich Tomcat und die entsprechende tomcat-users.xml-Datei. Das Problem ist, dass Spring Security nicht gut spielen kann (also die Authentifizierung an Tomcat weitergeben), damit der App-Server die Authentifizierung durchführt und Spring die rollenbasierte Sicherheit verwaltet, sobald jemand authentifiziert ist. Ich benutze die neuesten Spring-Versionen, also ist es alles Java-Konfiguration, da ich einfach nicht vertraut genug bin mit XML-basierten Config. Ich habe viele Beispiele gelesen, die über die Verwendung eines PreAuthenticatedAuthenticationProviders sprechen, aber die Beispiele sind schlecht, ganz zu schweigen von der Spring-Dokumentation, die IMHO ziemlich verwirrend ist. Ich habe sogar den Preauth-Beispielcode aus dem Spring Security-GIT-Hub heruntergeladen, kann aber immer noch nicht sehen, wie der Beispielcode an die von Tomcat ausgeführte Authentifizierung gebunden ist. Wenn ich den Spring-Beispielcode für preauth ausführe, authentifiziert er sich nicht mit einem der Benutzer in meiner tomcat-users XML-Datei, da ich meinen Code für Tomcat 8 bereitgestellt habe. Ich frage mich, ob jemand Ideen hat, wo ich hinschauen kann Verstehen Sie, wie Spring Security und die von Tomcat (Container-Verwaltung) durchgeführte Authentifizierung geschieht?Container-verwaltete Sicherheit, Spring-Sicherheit und Authentifizierung

UPDATE: Es scheint, ich von vorne anfangen musste und bekommen einfach die Authentifizierung mit einem sehr einfach app erstellt in meinem IDE zu arbeiten. Im Grunde hatte ich einen Ordner, der sicher hieß, einen Ordner, der unsicher hieß, und ich ordnete die Pfade gemäß der Spezifikation von Servlet 3 an, um zu sichern und zu entsichern, was ich brauchte. Ich musste eine web.xml verwenden, um die Sicherheitsbeschränkungen zu enthalten. Nachdem ich in Tomcat 7 und 8 getestet habe, wo ich versucht habe, eine sichere URL zu treffen, wurde ich aufgefordert, eine ID und ein Passwort einzugeben. Bitte beachten Sie, dass Sie den Pfad zu einer Login-Seite definieren müssen, meine war eine einfache JSP. Ich musste auch an die j_security_check übergeben und stellen Sie sicher, dass Sie die Feldnamen j_username und j_password verwenden. Sobald ich wusste, dass ich eine sichere Seite erreichen konnte, begann ich mit der Einführung der Spring-Komponenten. Dazu gehörten Spring Security, Spring Boot usw. Der Schlüssel war im WebSecurityConfigurerAdapter. Dort, wo normalerweise die Authentifizierung auf Basis von Authentifizierung oder Formular aktiviert ist, habe ich diese entfernt und stattdessen die Einstellung von jee() verwendet, die auf der gleichen fließenden Builder-API basiert, mit der die Sicherheitseinstellungen konfiguriert werden. Ich habe alle Einstellungen für den antmatcher in der web.xml gelassen, also war mein WebSecurityConfigurerAdapter sehr einfach. Wenn Sie Controller debuggen, können Sie die HttpServletRequest direkt in die Methode injizieren, und diese Anfrage enthält einen userPrincipal-Anforderungswert, der Dinge wie die Benutzer-ID und Rollen enthält. Viel Glück, hoffe, dass dies anderen hilft, weil es sehr lange dauerte, bis ich eine so einfache Lösung gefunden hatte.

Antwort

1

Siehe das Update für eine detaillierte Erklärung zu meiner Lösung.

Verwandte Themen