簡體   English   中英

遠程Spring Security授權

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM