在spring中使用缓存和拦截器进行登录/注销实现

时间:2014-01-06 09:26:39

标签: spring-mvc interceptor

我想在我的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(“token”)获取空值。我做错了什么

1 个答案:

答案 0 :(得分:0)

    用户登录时
  1. - >使用DB进行身份验证以及所有凭据 是正确的然后用密钥和存储将用户对象存储在缓存中 请求对象中的密钥。

  2. 从下一个请求中获取HandlerInterceptorAdapter的preHandle()方法中的请求对象的密钥,并检查缓存(如果存在),或重定向到登录页面。

  3. 在postHandle()中再次将令牌设置回客户端。

  4. 将令牌保存在公共jsp中,因此可以附加所有请求。

  5. 实施它的方法是什么,请建议.... /