** * 远程Session * 存放在Memcached缓存服务器里的Session * @author lx * */public class CacheSessionProvider implements SessionProvider { @Autowired private MemCachedClient memCachedClient; private final String SESSIONID="sessionId"; //设置数据保存在memcached的保存时间 private final Integer expiry=30*60; /** * 将session的值通过sessionId值存入memcached中 */ public void setAttribute(HttpServletRequest request, String name, Serializable value,HttpServletResponse response) { // TODO Auto-generated method stub Map session=new HashMap (); session.put(name, value); String sessionId=getSessionId(request, response); memCachedClient.set(sessionId, session, expiry); }/** * 通过用户本地的sessionId值到服务器获取session * 从缓存服务器memcached中获取sessionId值对应的session */ public Serializable getAttribute(HttpServletRequest request, String name,HttpServletResponse response) { // TODO Auto-generated method stub String sessionId=getSessionId(request, response); Map session = (Map )memCachedClient.get(sessionId); //返回保存在session中的用户数据 if(session!=null){ return session.get(name); } return null; } /** * * 删除缓存服务器memcached中中key=sessionId,这样用户即使 * 通过本地的sessionID也获取不到用户的数据 */ public void logout(HttpServletRequest request,HttpServletResponse response) { // TODO Auto-generated method stub //用户本地cookie String sessionId=getSessionId(request, response); if(memCachedClient.keyExists(sessionId)){ memCachedClient.delete(sessionId); } }/** * 获取sessionId,如果用户没有sessionId,则为用户创建一个sessionId */ public String getSessionId(HttpServletRequest request,HttpServletResponse response) { //获取存储在cookie的sessionId Cookie[] cookies = request.getCookies(); if(cookies!=null && cookies.length>0){ for (Cookie cookie : cookies) { if(SESSIONID.equals(cookie.getName())){ return cookie.getValue(); } } } //如果没有sessionId,为用户创建一个 String sessionId=UUID.randomUUID().toString().replaceAll("-", ""); Cookie cookie=new Cookie(SESSIONID, sessionId); cookie.setMaxAge(-1);// 默认-1,代表关闭浏览器就销毁cookie cookie.setPath("/"); response.addCookie(cookie); return sessionId; }