2014-01-06 22 views
0

我想在我的web應用程序中實現登錄/註銷,我使用Spring MVC,並登錄/註銷我使用Ehcache和HandlerInterceptorAdapter。其基本思想是:登錄/註銷實現使用緩存和攔截器在春天

  • 當用戶登錄 - >使用DB身份驗證,如果所有的憑據 是正確的,那麼存儲的用戶對象在緩存中的一個關鍵和存儲 在請求對象的關鍵。

  • 從下一個請求得到請求對象在preHandle()的關鍵HandlerInterceptorAdapter的 方法,並檢查在緩存中是否存在,或
    重定向到登錄頁面。在緩存中存儲

代碼:

if(validateUserFromDB()){ 
    /* if a valid user */ 

    userDtlForm = iHomePageService.getUserDetails(emailIdOfUser); 
    String token = generateSomeUniqueTokenForTheUser(); 

    /* put the user in cache : [ key --> token || value--> userDtlForm ] */ 
    storeTheTokenInCache(); 
    request.setAttribute("token ", token); 
} 

現在每隔要求我檢查針對我的攔截令牌緩存。

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { 
    String token = request.getAttribute("token"); 
    /* isValid == true when user exists inthe cache */ 
    boolean isValid = checkCacheForTheToken(token); 
    if (!isValid) { 
      //redirect to login page 
      return false; 
    } 
    return true; 
} 

,但問題是我通過request.getAttribute(「令牌」)在我interceptor.what越來越空值我做錯

+0

任何人都可以提供我一個例子做同樣的,:( –

回答

0
  1. 當用戶登錄 - >使用DB和驗證如果所有憑證 都是正確的,則將用戶對象存儲在緩存中,並使用密鑰存儲請求對象中的密鑰 。

  2. 從下一個請求中獲取HandlerInterceptorAdapter的preHandle()方法中的請求對象的密鑰,並檢查緩存是否存在或重定向到登錄頁面。

  3. 在postHandle()中再次將令牌設置回客戶端。

  4. 在一個普通的jsp中維護令牌,因此它可以附加所有請求。

什麼來實現它,請建議的道路.../