Java简单实现session保存到redis的方法示例
本文实例讲述了Java简单实现session保存到redis的方法。分享给大家供大家参考,具体如下:

成都创新互联公司坚持“要么做到,要么别承诺”的工作理念,服务领域包括:做网站、成都网站建设、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的博湖网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
在负载均衡情况下,如果用户访问不同的机器,如果没有做session同步,用户就会被提出,这样用户体验非常不好,所以我们很有必要做session同步,把session放到reids缓存服务器就能很好的解决问题。下面是代码简单的实现。
一、配置web.xml过滤器:
sessionFilter
org.springframework.web.filter.DelegatingFilterProxy
sessionFilter
/*
二、配置对应的过滤器名字:
三、SessionFilter的实现:
public class SessionFilter extends GenericFilterBean {
private RedisTemplate redisTemplate;
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
System.out.println("filter");
HttpServletRequest re = (HttpServletRequest)request;
HttpServletResponse res = (HttpServletResponse)response;
TerryHttpServletRequestWrapper wrapper = new TerryHttpServletRequestWrapper(re,res,redisTemplate);
chain.doFilter(wrapper, response);
}
public RedisTemplate getRedisTemplate() {
return redisTemplate;
}
public void setRedisTemplate(RedisTemplate redisTemplate) {
this.redisTemplate = redisTemplate;
}
}
四、TerryHttpServletRequestWrapper的实现:
public class TerryHttpServletRequestWrapper extends HttpServletRequestWrapper {
private CacheHttpSession session;
private HttpServletResponse response;
private RedisTemplate redisTemplate;
public TerryHttpServletRequestWrapper(HttpServletRequest request, HttpServletResponse response,RedisTemplate redisTemplate) {
super(request);
this.response = response;
this.redisTemplate = redisTemplate;
}
@Override
public HttpSession getSession(boolean create) {
if(session != null) {
return session;
}
String sid = "terry" + System.currentTimeMillis();
writeSidToCookie(sid);
session = new CacheHttpSession(null,sid,redisTemplate);
return session;
}
@Override
public HttpSession getSession() {
return getSession(false);
}
protected void writeSidToCookie(String sid) {
Cookie mycookies = new Cookie("terry", sid);
mycookies.setMaxAge(-1);
mycookies.setDomain("locahost");
mycookies.setPath("/");
response.addCookie(mycookies);
}
}
五、CacheHttpSession的实现:
public class CacheHttpSession extends HttpSessionWrapper {
private String sid;
private RedisTemplate redisTemplate;
private StringRedisSerializer stringSerializer = new StringRedisSerializer();
public CacheHttpSession(HttpSession session,String sid,RedisTemplate redisTemplate) {
super(session);
this.sid = sid;
this.redisTemplate = redisTemplate;
}
@SuppressWarnings("unchecked")
@Override
public Enumeration getAttributeNames() {
final byte[] key = stringSerializer.serialize(sid);
Object result = redisTemplate.execute(new RedisCallback