自定义一个缓存类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 { }
}

最新文章

  1. [无聊的事-连载之连开100个VS] 折腾你的骚机吧,骚年们!!!
  2. (转) Artificial intelligence, revealed
  3. SQL学习笔记:选取第N条记录
  4. [POJ] 3277 .City Horizon(离散+线段树)
  5. extjs4 与 kindeditor
  6. [原创]SQL SERVER 2008R2 技术总结专题目录索引
  7. (转)RabbitMQ消息队列(三):任务分发机制
  8. document.onclick vs window.onclick
  9. Visual Studio 创建和使用dll的方法
  10. SQL优化策略高级优化经常使用-1(The Return Of The King)
  11. JavaEE开发基于Eclipse的环境搭建以及Maven Web App的创建
  12. x86平台上的Windows页表映射机制
  13. Ambiguous mapping found
  14. 依据word模板批量生成试卷
  15. Petrozavodsk Winter Camp, Day 8, 2014, Ship
  16. Java 容器源码分析之 Deque 与 ArrayDeque
  17. shell编程/字库裁剪(1)——想法
  18. ABP框架系列之十三:(Authorization-授权)
  19. windows + php + redis的安装
  20. Eclipse搭建maven project web war项目pom.xml报错

热门文章

  1. CSS 布局Float 【2】
  2. mybatis审查要点
  3. case 后面可以接汉语
  4. 使用wrapper将java程序注册程windows服务后不生效
  5. html a标签
  6. HTML5 canvas生成图片马赛克特效插件
  7. MongoDB-GRIDFS大文件系统
  8. thinkphp excel txt文件上传实现
  9. iOS开发网络篇—JSON数据的解析
  10. Python实现ID3算法