[英]Spring Security authorization remotely
我目前正在使用Spring Security 4,並且使用默認配置可以正常工作。 但是,當我在一台機器(192.168.0.1)上保存Spring Web應用程序而另一台機器(192.168.0.2)上保存HTML Server時,如何使用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上,用戶可以通過授權。 但是,我在192.168.0.2上的cookie中找不到任何JSESSIONID或任何相關的東西。
我的問題是,為了讓Spring Security知道我是誰,我應該在后續的ajax請求中包括哪些信息之王?
順便說一句,如果我的授權失敗,瀏覽器將被重定向到192.168.0.1/xxx/login
,如何保留在自定義登錄頁面中?
謝謝。
為了簡化起見,假設您有兩台計算機。
AppIp : 192.168.0.1
StaticIp : 192.168.0.2
現在,當您在瀏覽器中加載表單時,它將點擊StaticIp
。 依次提交給AppIp
。
這是正在發生的事情。 將表單提交給AppIp
,它將返回JSESSIONID
或要為AppIp
設置的任何其他Cookie
。 因此,瀏覽器執行相同的操作,它為AppIp
而不是StaticIp
設置cookie。
一個域(例如google.com)只能讀取/寫入其自己的Cookie。 瀏覽器不會設置Google發送給Facebook的Cookie。
這就是為什么您無法在StaticIp
資源中看到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
,它將能夠為兩個映射的服務器設置cookie。
注意:您不能發送普通的Ajax跨域請求。 瀏覽器將阻止所有此類嘗試。 Ajax請求只能發送到加載了執行Ajax腳本的HTML的域。 可以通過對CORS進行一些配置來完成此操作,但是這太麻煩了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.