亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

Java簡單實現session保存到redis的方法示例

2024-07-14 08:40:47
字體:
來源:轉載
供稿:網友

本文實例講述了Java簡單實現session保存到redis的方法。分享給大家供大家參考,具體如下:

在負載均衡情況下,如果用戶訪問不同的機器,如果沒有做session同步,用戶就會被提出,這樣用戶體驗非常不好,所以我們很有必要做session同步,把session放到reids緩存服務器就能很好的解決問題。下面是代碼簡單的實現。

一、配置web.xml過濾器:

<filter>    <filter-name>sessionFilter</filter-name>    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class></filter><filter-mapping>    <filter-name>sessionFilter</filter-name>    <url-pattern>/*</url-pattern></filter-mapping>

二、配置對應的過濾器名字:

<bean id="sessionFilter" class="com.plateno.interceptor.SessionFilter">    <property name="redisTemplate" ref="redisTemplate"/></bean>

三、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<String> getAttributeNames() {    final byte[] key = stringSerializer.serialize(sid);    Object result = redisTemplate.execute(new RedisCallback<Object>() {      @Override      public Object doInRedis(RedisConnection connection)          throws DataAccessException {        Set<byte[]> set = connection.keys(key);        return set;      }    });    if(result != null) {      Set<byte[]> s = (Set<byte[]>)result;      Set<String> ss = new HashSet<String>();      for(byte[] b : s) {        ss.add(stringSerializer.deserialize(b));      }      Enumeration<String> en = new Vector(ss).elements();      return en;    }    return null;  }  @SuppressWarnings("unchecked")  @Override  public void setAttribute(String name, Object value) {    final byte[] key = stringSerializer.serialize(name);    final byte[] v = stringSerializer.serialize((String)value);    redisTemplate.execute(new RedisCallback<Object>() {      @Override      public Object doInRedis(RedisConnection connection)          throws DataAccessException {        connection.set(key, v);        return null;      }    });  }  @Override  public Object getAttribute(String name) {    final byte[] key = stringSerializer.serialize(name);    @SuppressWarnings("unchecked")    Object value = redisTemplate.execute(new RedisCallback<Object>() {      @Override      public Object doInRedis(RedisConnection connection)          throws DataAccessException {        return connection.get(key);      }    });    return value;  }  @Override  public String getId() {    return sid;  }}

六、HttpSessionWrapper的實現:

public class HttpSessionWrapper implements HttpSession {  private HttpSession session;  public HttpSessionWrapper(HttpSession session) {    this.session = session;  }  @Override  public long getCreationTime() {    return this.session.getCreationTime();  }  @Override  public String getId() {    return this.session.getId();  }  @Override  public long getLastAccessedTime() {    return this.session.getLastAccessedTime();  }  @Override  public ServletContext getServletContext() {    return this.session.getServletContext();  }  @Override  public void setMaxInactiveInterval(int interval) {    this.session.setMaxInactiveInterval(interval);  }  @Override  public int getMaxInactiveInterval() {    return this.session.getMaxInactiveInterval();  }  @Override  public HttpSessionContext getSessionContext() {    return this.session.getSessionContext();  }  @Override  public Object getAttribute(String name) {    return this.session.getAttribute(name);  }  @Override  public Object getValue(String name) {    return this.session.getValue(name);  }  @Override  public Enumeration<String> getAttributeNames() {    return this.session.getAttributeNames();  }  @Override  public String[] getValueNames() {    return this.session.getValueNames();  }  @Override  public void setAttribute(String name, Object value) {    this.session.setAttribute(name,value);  }  @Override  public void putValue(String name, Object value) {    this.session.putValue(name,value);  }  @Override  public void removeAttribute(String name) {    this.session.removeAttribute(name);  }  @Override  public void removeValue(String name) {    this.session.removeValue(name);  }  @Override  public void invalidate() {    this.session.invalidate();  }  @Override  public boolean isNew() {    return this.session.isNew();  }}

以上代碼就能把session保存到redis,當然這其中還有很多問題,比如sessionId的生成,session過去,對象序列化(測試為了方便統一用了string),等等很多問題。以后有時間再完善。

希望本文所述對大家java程序設計有所幫助。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美一区二区三区四区在线| 国产精品无av码在线观看| 91国产中文字幕| 在线视频国产日韩| 蜜月aⅴ免费一区二区三区| 国产精品69久久久久| 欧美一级免费看| 欧美成人精品在线观看| 日韩午夜在线视频| 欧美亚洲成人免费| 国产亚洲综合久久| 久久伊人精品一区二区三区| 久久久精品国产网站| 色多多国产成人永久免费网站| 欧美日韩国产一中文字不卡| 中国日韩欧美久久久久久久久| 色偷偷88888欧美精品久久久| 亚洲精品欧美日韩| 九九精品视频在线观看| 国语自产精品视频在线看一大j8| 91日韩在线播放| 国产亚洲激情在线| 韩日欧美一区二区| 91久久久久久久| 日韩电影中文字幕在线观看| 欧美日韩裸体免费视频| 亚洲人成电影网站色| 亚洲国产一区二区三区在线观看| 亚洲国产欧美自拍| 国产女精品视频网站免费| www.美女亚洲精品| 色综合视频网站| 亚洲国产精彩中文乱码av| 亚洲国产精品久久| 亚洲一区二区三区毛片| 亚洲国产日韩一区| 久久免费少妇高潮久久精品99| 日韩在线视频二区| 最新国产精品拍自在线播放| 亚洲男人天堂手机在线| 日韩av中文字幕在线免费观看| 亚洲一区二区三区成人在线视频精品| 久久久在线视频| 亚洲精品小视频在线观看| 日韩在线观看你懂的| 欧美最猛性xxxx| 亚洲欧美日韩精品久久亚洲区| 亲子乱一区二区三区电影| 精品久久久久久久久久久| 国产精品视频成人| 日韩欧美在线观看| 成人国产精品av| 色先锋资源久久综合5566| 亚洲欧美国产一区二区三区| 国产精品久久久久久亚洲调教| 国产自产女人91一区在线观看| 亚洲人成在线观看网站高清| 久久久这里只有精品视频| 成人免费视频网址| 91精品国产91久久久久久| 精品国产一区二区三区久久狼5月| 亚洲欧美一区二区激情| 国产精品电影在线观看| 国产精品视频白浆免费视频| 色综合天天狠天天透天天伊人| 亚洲自拍另类欧美丝袜| 91色p视频在线| 成人亚洲综合色就1024| 国产欧美日韩丝袜精品一区| 国色天香2019中文字幕在线观看| 亚洲男人天堂2019| 亚洲激情成人网| 国产精品自产拍在线观| 亚洲精品免费网站| 国产精品久久久久久久久久久不卡| 91精品国产自产在线老师啪| 色无极影院亚洲| 91网站免费看| 日本19禁啪啪免费观看www| 久久不射热爱视频精品| 欧美电影免费观看电视剧大全| 狠狠久久五月精品中文字幕| 日本精品一区二区三区在线播放视频| 欧美中文字幕在线播放| 9.1国产丝袜在线观看| 精品久久久国产精品999| 中文字幕日韩有码| 久久精品青青大伊人av| 亚洲欧美激情四射在线日| 国产日韩欧美在线看| 日韩免费av在线| 91久久久久久久久久| 欧美日韩在线观看视频| 热re91久久精品国99热蜜臀| 亚洲精品欧美一区二区三区| 国产成人精品久久亚洲高清不卡| 国内外成人免费激情在线视频| 精品偷拍各种wc美女嘘嘘| 日本欧美黄网站| 国产精品久久久久77777| 欧美一级高清免费| 国产欧美精品一区二区三区-老狼| 4388成人网| 中文字幕精品影院| 欧美性受xxxx白人性爽| 亚洲福利视频网| 亚洲男女自偷自拍图片另类| 日韩精品视频中文在线观看| 亚洲a级在线播放观看| 日韩av在线免费观看一区| 国产精品久久99久久| 国产午夜精品全部视频在线播放| 色偷偷偷亚洲综合网另类| 国产精品爱久久久久久久| 色狠狠av一区二区三区香蕉蜜桃| 国产精品高精视频免费| 91av在线视频观看| 国产精品偷伦视频免费观看国产| 日韩毛片在线看| 国产成人在线精品| 亚洲女同性videos| 亚洲一区二区三区乱码aⅴ| 日韩久久免费电影| 日韩在线视频观看正片免费网站| 国产精品视频一区二区三区四| 成人久久久久久久| 国产成人综合精品| 97视频在线播放| 久久亚洲春色中文字幕| 亚洲qvod图片区电影| 欧洲成人在线视频| 亚洲一区二区三区777| 国产精品91免费在线| 欧美肥老妇视频| 性色av一区二区三区免费| 久久久这里只有精品视频| 国产精品久久久久久久久久久新郎| 亚洲第一精品夜夜躁人人躁| 欧美成人全部免费| 成人欧美一区二区三区在线| 中文字幕欧美精品日韩中文字幕| 国产成人自拍视频在线观看| 日本久久久久久久| 欧美裸体xxxx极品少妇软件| 久久99热精品这里久久精品| 亚洲精品成人久久电影| 久久久av免费| 成人免费淫片aa视频免费| 另类视频在线观看| 亚洲国产精品小视频| 亚洲欧美日韩国产中文专区| 久久精品成人欧美大片| xxx欧美精品| 91视频-88av| 久久夜色精品亚洲噜噜国产mv| 欧美精品激情在线| 草民午夜欧美限制a级福利片| 中国china体内裑精亚洲片| 国产精品99久久99久久久二8| 亚洲高清在线观看| 伊人精品在线观看| 51视频国产精品一区二区| 欧美国产亚洲精品久久久8v| 91精品国产综合久久久久久久久|