應用程序時,我的應用程序與Apache四郎保護。當我通過localhost:8080/MyApp訪問我的應用程序時,我被成功重定向到localhost:8080/MyApp/login。 我使用憑據進行身份驗證,並且一切都很好 - 我正在重定向到需要身份驗證的主頁。阿帕奇四郎會話無效訪問通過nginx的proxy_pass
我已經配置nginx的代理與「很好」尋找這樣的URL來訪問應用程序:
server {
server_name www.example.com example.com;
listen 80;
location/{
proxy_pass http://localhost:8080/MyApp/;
}
}
當我通過www.example.com訪問我的申請,我被再次成功地重定向到www.example.com/login,我填寫的憑據,但隨後的不是去我的主頁,我再次被重定向,如果我未通過身份驗證登錄頁面。
我試過幾件事情,第一 - 我檢查了我的要求是否達到負責認證和是否我確實驗證的網址,我在我的控制器,兩個映射:
- /登錄 - 這重定向到四郎登錄頁面
- /login.do - 這實際上做認證
當任一被調用即時顯示在控制檯中,如果我通過認證:
System.out.println("is auth:" + SecurityUtils.getSubject().isAuthenticated());
當我去www.example.com這是發生了什麼:
- 我沒有通過認證,因此四郎重定向到登錄網址,/登錄被調用,我在控制檯中看到,確實我「M未通過身份驗證
- 我填寫了用戶名和passwd和我張貼的數據/login.do,在控制檯中我看到,我順利通過認證,login.do試圖重定向到主頁,而是我結束了在登錄卵石,因而/登錄被調用並在控制檯中我看到我不再驗證
我不知道它是否是Shiro的過失或錯誤可能nginx的配置,所以我已經改變了nginx的配置以下內容:
server {
server_name www.example.com example.com;
listen 80;
location /MyApp {
proxy_pass http://localhost:8080;
}
}
通過上述nginx的配置,並通過www.example訪問應用程序.com/MyApp,一切都像一個魅力,我被重定向到登錄頁面,我成功驗證,我被重定向到主頁。
任何人能解釋這種行爲?那是nginx還是shiro的問題,還是我缺少其他東西?
//編輯:我想我知道出了什麼問題,但我不知道如何解決它尚未:
我覺得四郎使用應用程序名稱保存的cookies,www.example.com和www.example.com/MyApp將Cookie保存在相同的路徑下 -/MyApp,因此www.example。COM無法找到正確的餅乾 - 這同樣是僅僅在這一點上懷疑
//編輯:我開始認爲這是由於Sprinv MVC重定向(我認爲這不是財會的servlet上下文)