2016-04-17 4 views
0

В настоящее время я работаю над Spring Security 4, и все работает нормально, используя конфигурацию по умолчанию. Однако, поскольку я использую веб-приложение Spring на одной машине (192.168.0.1) и HTML Server на другой (192.168.0.2), как настроить Spring Security для авторизации с использованием формы входа в систему на 192.168.0.2.Spring Security авторизация удаленно

конфигурации Spring Security:

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

В настоящее время, в форме входа на 192.168.0.2, я использую

<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> 

На 192.168.0.2, пользователь может пройти авторизацию. Тем не менее, я не могу найти JSESSIONID в файле cookie 192.168.0.2 или любой другой важной вещи.

Мой вопрос: какой король информации я должен включить в следующий запрос ajax, чтобы сообщить Spring Security, кто я?

BTW, если моя авторизация не удалась, браузер будет перенаправлен на 192.168.0.1/xxx/login, как я могу остаться на моей странице входа?

Спасибо.

ответ

2

Чтобы упростить ситуацию, можно сказать, что у вас две машины.

AppIp : 192.168.0.1 
StaticIp : 192.168.0.2 

Теперь при загрузке формы в браузере он попадает StaticIp. Что в свою очередь представляет AppIp.

Вот что происходит. Когда вы отправите форму на номер AppIp, она возвращает JSESSIONID или любые другие Cookie, которые будут установлены для AppIp. Таким образом, браузер делает то же самое, он устанавливает cookie для AppIp не StaticIp.

Один домен (например, google.com) может читать/писать только собственные файлы cookie. Браузер не будет устанавливать cookie, отправленный Google для Facebook.

Вот почему вы не можете видеть файлы cookie в StaticIp ресурсах, если вы загружаете AppIp, вы сможете увидеть файлы cookie в своих ресурсах.

Решение должно иметь прокси-сервер перед обоими серверами. Например Apache HTTPd или NGINX.

Теперь предположим, что прокси-сервер ProxyIp, и конфигурация выполняется следующим образом.

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

Так что теперь форма URL становится http://ProxyIp/static/home.html

И /login URL станет http://ProxyIp/app/xxx/login

Теперь для браузера есть только один домен ProxyIp и он будет иметь возможность установить кук для обоего отображенных сервера.

Примечание: Вы не можете отправлять обычные запросы доменного имени Ajax. Браузер заблокирует все такие попытки. Запросы Ajax могут быть отправлены только в домен, который загрузил HTML-код, где был выполнен скрипт для Ajax.Это можно сделать с некоторой конфигурацией для CORS, но это слишком большая боль и пот.

+0

Очень четкий ответ. Спасибо. –

+0

Добро пожаловать! – 11thdimension

Смежные вопросы