2014-10-20 82 views
0

應用程序時,我的應用程序與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這是發生了什麼:

  1. 我沒有通過認證,因此四郎重定向到登錄網址,/登錄被調用,我在控制檯中看到,確實我「M未通過身份驗證
  2. 我填寫了用戶名和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上下文)

回答

0

是的確實是Spring重定向問題。 而不是返回的:

return "redirect:/some/path"; 

我返回以下:

return new RedirectView("/some/path", true);