2014-09-01 180 views
4

有人知道如何打開彈出登錄進行身份驗證(使用彈簧安全),當用戶做了需要驗證的事情,而他不是。彈簧安全打開彈出登錄

例如:讓我們想象這個頁面有一個按鈕「立即購買」,將產品添加到購物車並執行結賬(即時購買頁面),如果用戶已經過認證,或者打開用戶的彈出窗口執行認證。

如果身份驗證成功,則彈出消息會重定向到「立即購買」頁面,或者在彈出窗口打開的情況下停留在該頁面(錯誤消息「錯誤登錄」)。

我已經在谷歌搜索了一種解決方案,但沒有運氣。

有人可以指出我正確的方向嗎?

謝謝

+0

據我所知,問題不是打開彈出窗口,而是更知道什麼時候打開彈出窗口而無需重新加載當前頁面以防萬一訪問被拒絕。 - 這是正確的嗎? – Ralph 2014-09-14 12:21:44

+0

你可以給這個【答案】(http://stackoverflow.com/questions/3444864/ajax-login-with-spring-webmvc-and-spring-security)一試。 – kazbeel 2014-09-18 05:23:57

回答

4

只是一個想法,還沒有來得及測試它。它只是客戶端。

  1. 把一個事件監聽鏈接/按鈕,點擊事件
  2. 使用JavaScript,並呼籲通過XMLHttpRequest
  3. 形式,動作或鏈接檢查HTTP狀態代碼:xhr.status
  4. 如果(OK)替換的目標URL(via Html5 History API)當前URL和替換xhr.responseTextWhat other options for replacing entire HTML document via W3C DOM)整個文檔
  5. 否則,如果(重定向)只要按照重定向
  6. else if(Unauthorized)open popup
0

將任務分解爲組件。

創建一個根據您的標準激活的燈箱。

通過ajax讓表單提交。

您的身份驗證控制器需要做到以下幾點:

如果succesfull - >重定向到 結賬頁面,如果未succesfull回報片段建議爲什麼它不正確。

如果返回不正確,則需要完全刷新表單元素以確保沒有csrf攻擊。

就是這樣,我做了我的,不能給你代碼,因爲它取決於你如何設置你的項目和查看渲染。

+0

的有機磷農藥的問題更多的是關於如何在驗證踢,因此,在正確的時刻顯示的驗證框,但不知道如何提交用戶名和密碼。 – Ralph 2014-09-03 09:32:00

0

用戶點擊時可以使用ajax呼叫Buynow按鈕來檢查用戶是否被認證。

如果用戶通過驗證,則將產品購物車表單提交或轉發到下一個視圖(控制器方法)。

如果未通過身份驗證,您可以打開一個彈出窗口進行登錄。

在登錄表單中使用ajax驗證用戶,如果成功提交購物車表單到下一個視圖,則給出錯誤信息。

在會話中存儲購物車信息,以便您可以在下一個視圖中使用它們。

0

某些事件的彈出窗口實現必須完成(你可以使用任何前端框架)。鑑於身份驗證問題,「project-security.xml」將爲您做到這一點。您只應按照您的要求進行配置。

1

其實Spring Security支持開箱即用的重定向,請看SavedRequestAwareAuthenticationSuccessHandler,所以你唯一需要做的就是保護網址(例如:你有你的購買按鈕的類似<intercept-url pattern = "/purchase/*" access = "isAuthenticated()" />(或者,如果access = "hasRole('user')不管你在那裏做)(其中不要求像"/purchase/"productIdHere"/purchase?productId=someProductId),然後將用戶重定向到登錄頁面,登錄成功後,他應該回到他原來的頁面。 而在你的控制器可以處理類似請求:

@Controller 
... 

@RequestMapping(value = "/purchase..., method = ....) 
public ModelAndView purchase(@PathVariable("productId") String/Long productId (or @RequestParam etc...) 
Product someProduct = someService.getByProductId(productId); 
ModelAndView mav = new ModelAndView("view.name"); 
mav.setObject("product",product); 
return mav; 

,你必須符合每您的需要其他的東西,只是想爲你問指向正確的方向。

希望它能幫助。

+0

但重定向不是彈出式菜單。 – Ralph 2014-09-16 22:01:09

-1

春季安全工作過Spring MVC的 - 它使用重定向。所以這個想法是當用戶試圖訪問一個「安全」的內容,並且他沒有被認證時,然後HTTP 302被返回並重定向到登錄頁面。如果你有興趣在彈出​​的窗口中,你打破了MVC模型,它可以實現,當然,但你的生活會更加困難....