自定義一個緩存類AdminCache
package jw.admin.common; import jw.base.entity.Admin; import sun.security.util.Cache; public class AdminCache { //第一個參數表示cache對象中允許添加的鍵值對數量,第二個參數表示緩存的時間,單位是秒 private static Cache cache = Cache.newHardMemoryCache(0,3600 * 24 * 7); public static Admin get(String key){ return (Admin)cache.get(key); } public static void set(String key,Admin admin){ AdminCache.cache.put(key,admin); } }
登陸成功發送Cookie到客戶端並保存到緩存中
//如果選擇記住登錄狀態,把用戶簽名保存到cookie中,把簽名和簽名的對象保存到緩存中 if (remember == true){ Cookie cookie = new Cookie("adminSign",admin.sign()); cookie.setMaxAge(60 * 60 * 24 * 7); cookie.setPath("/"); response.addCookie(cookie); AdminCache.set(admin.sign(),admin); }
在spring-servlet中配置攔截器路徑
<mvc:interceptors> <!-- 使用bean定義一個Interceptor,直接定義在mvc:interceptors根下面的Interceptor將攔截所有的請求 --> <bean class="jw.admin.interceptor.AuthInterceptor"/> <bean class="jw.admin.interceptor.AuthCookieInterceptor"/> </mvc:interceptors>
攔截器內容
package jw.admin.interceptor; import jw.admin.common.AdminCache; import jw.base.entity.Admin; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class AuthCookieInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { HttpSession session = request.getSession(); //判斷session中的用戶信息是否存在,不存在從cookie中獲取然后裝如session if(session.getAttribute("admin") == null){ Cookie[] cookies = request.getCookies(); if(cookies != null && cookies.length > 0){ for(int i = 0; i < cookies.length; i++){ if(cookies[i].getName().equals("adminSign")){ String sign = cookies[i].getValue(); Admin admin = AdminCache.get(sign); //根據簽名獲取用戶的完整信息裝如session session.setAttribute("admin",admin); break; } } } } return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { } }