2016-01-04 81 views
0

我正在嘗試集成一個非常古老的Java Web應用程序和一個AngularJs前端。我不能使用Spring框架,基本上必須手工編寫代碼。這裏是我的具體問題:AngularJs和Java Servlet技術

  1. 我張貼登錄表單給servlet進行認證時,servlet與權限對象和JSESSIONID回覆。當我離開並返回頁面時,如何避免重新登錄?我需要另一個cookie來存儲用戶名/密碼嗎?

  2. 如何使用此架構提供CSRF保護?

一個例子將非常感激。

回答

0

我實際上實現了兩個解決方案,一個使用JWT,另一個使用傳統Java Servlet實現,使用Jsessionid cookie。到目前爲止,我覺得餅乾一個更乾淨所以這裏有一些細節:

  1. login.html的帖子用戶名/密碼形式的servlet。 servlet驗證憑證,如果成功則啓動一個新會話(這會導致jsessionid cookie)。如果身份驗證失敗,則返回HttpServletResponse.SC_UNAUTHORIZED。

    a。如果回調成功,客戶端將瀏覽器重定向到我的application.html頁面。

    b。如果失敗提示消息並保留在login.html頁面上。

  2. 當application.html頁面立即加載它時,會向登錄servlet發送一個虛擬獲取請求,以確保該會話仍然有效。如果是的話,它會加載頁面的其餘部分,如果沒有重定向回登錄頁面。
  3. 使用驗證會話ID的驗證過濾器以相同方式保護Web服務。

迄今爲止它看起來不錯並且非常直接。

2

我的建議是使用JWT令牌和Satellizer庫來簡化您的工作。在用戶登錄後,如果您向他發佈了JWT令牌,他應該在每個http請求上傳回該令牌(Satellizer在成功登錄後自動注入)。您需要驗證它並相應地允許/限制用戶的行爲。很少有Java庫可以簡化服務器端JWT令牌的工作。我已經在我的幾個項目jose4j庫中使用過,並且對它有積極的體驗。

Satellizer和jose4j在他們的wiki上都有很好的例子來說明如何使用它們。

+0

這是一個很好的領導,謝謝。但在這一點上,我正在尋找一種基於cookie的方法,而不是JWT。 – JavaHead