2016-04-17 22 views
0

Ich arbeite gerade an Spring Security 4 und alles funktioniert gut mit Standardkonfiguration. Wie kann ich Spring Web Application auf einem Computer (192.168.0.1) und HTML Server auf einem anderen Computer (192.168.0.2) konfigurieren? Wie kann ich die Spring Security für die Autorisierung mithilfe des Anmeldeformulars unter 192.168.0.2 konfigurieren?Spring Security Autorisierung remote

Spring Security-Konfiguration:

<http use-expressions="true" auto-config="true" > 
    default-target-url="http://192.168.0.2/home.html" 
</http> 

Derzeit in dem Login-Formular auf 192.168.0.2, verwende ich

<form method="post" action="http://192.168.0.1:8080/xxx/login"> 
    <input type="text" required name="username"/> 
    <input type="password" required name="password"/> 
    <button type="submit">Sign in</button> 
</form> 

auf 192.168.0.2, kann der Benutzer die Genehmigung übergeben. Ich kann jedoch keine JSESSIONID im Cookie auf 192.168.0.2 oder irgendeiner relevanten Sache finden.

Meine Frage ist, welcher König von Informationen sollte ich in der Folge Ajax Anfrage enthalten, um die Spring Security wissen, wer ich bin?

Übrigens, wenn meine Autorisierung fehlschlägt, wird der Browser an 192.168.0.1/xxx/login umgeleitet, wie kann ich auf meiner benutzerdefinierten Anmeldeseite bleiben?

Danke.

Antwort

2

Um die Dinge einfacher zu machen, sagen wir, Sie haben zwei Maschinen benannt.

AppIp : 192.168.0.1 
StaticIp : 192.168.0.2 

Nun, wenn Sie das Formular in dem Browser laden trifft es StaticIp. Was wiederum an AppIp übermittelt.

Hier ist was passiert. Wenn Sie das Formular an AppIp senden, gibt es das JSESSIONID oder jedes andere Cookie zurück, das für AppIp festgelegt wird. Also der Browser macht das gleiche, es setzt den Cookie für AppIp nicht StaticIp.

Eine Domain (wie google.com) kann nur ihre eigenen Cookies lesen/schreiben. Der Browser wird keinen von google für facebook gesendeten Cookie setzen.

Deshalb können Sie die Cookies in StaticIp Ressourcen nicht sehen, wenn Sie die AppIp laden, können Sie Cookies in seinen Ressourcen sehen.

Lösung ist, einen Proxy-Server vor den beiden Servern zu haben. Zum Beispiel Apache HTTPd oder NGINX.

Nun nehmen wir an, dass der Proxy-Server ProxyIp ist und die Konfiguration wie folgt durchgeführt wird.

ProxyIp/static maps to http://192.168.0.2/ (or http://AppIp/) 
ProxyIp/app maps to http://192.168.0.1/ (or http://StaticIp/) 

So, jetzt die Form URL wird http://ProxyIp/static/home.html

Und /login URL würde http://ProxyIp/app/xxx/login

Jetzt für den Browser gibt es nur eine Domain ProxyIp und es würde die Cookies zu setzen in der Lage sowohl für die abgebildete Server.

Hinweis: Sie können keine normalen Ajax-Cross-Domain-Anfragen senden. Der Browser blockiert alle diese Versuche. Ajax-Anfragen können nur an eine Domäne gesendet werden, die den HTML-Code geladen hat, in dem das Skript für Ajax ausgeführt wurde.Es kann mit etwas Konfiguration für CORS getan werden, aber das ist zu viel Schmerz und Schweiß.

+0

Sehr klare Antwort. Vielen Dank. –

+0

Gern geschehen! – 11thdimension