160527、项目上线后session(远程session)
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import com.danga.MemCached.MemCachedClient;
/**
* 远程Session存放在Memcached缓存服务器里的Session
*/
public class CacheSessionProvider implements SessionProvider{
@Autowired
private MemCachedClient memCachedClient;
private int expiry = 30;//分钟
private static final String JSESSIONID = "JSESSIONID";
//放值
@Override
public void setAttribute(HttpServletRequest request,HttpServletResponse response, String name,
Serializable value) {
/* HttpSession session = request.getSession();//true Cookie JSESSIONID
session.setAttribute(name, value); */
//本地有一份
//另一份Memcached
Map<String,Serializable> session = new HashMap<String,Serializable>();
session.put(name, value);
//保存远程了
memCachedClient.set(getSessionId(request,response), session, expiry*60);
}
//取值
@SuppressWarnings("unchecked")
@Override
public Serializable getAttribute(HttpServletRequest request,HttpServletResponse response, String name) {
Map<String,Serializable> session = (Map<String, Serializable>) memCachedClient.get(getSessionId(request,response));
if(null != session){
return session.get(name);
}
return null;
}
@Override
public void logout(HttpServletRequest request,HttpServletResponse response) {
// TODO Auto-generated method stub
if(memCachedClient.keyExists(getSessionId(request, response))){
memCachedClient.delete(getSessionId(request, response));
}
//清理Cookie
}
@Override
public String getSessionId(HttpServletRequest request,HttpServletResponse response) {
//所有的Cookie
Cookie[] cookies = request.getCookies();
if(null != cookies && cookies.length > 0){
for(Cookie c : cookies){
if(JSESSIONID.equals(c.getName())){
return c.getValue();
}
}
}
//生成一个
String sessionId = UUID.randomUUID().toString().replaceAll("-", "");
Cookie cookie = new Cookie(JSESSIONID,sessionId);
cookie.setMaxAge(-1);
cookie.setPath("/");
response.addCookie(cookie);
return sessionId;
}
public void setExpiry(int expiry) {
this.expiry = expiry;
}
}
注意:平时开发的时候是本地session,上线后放在缓存里面,所以将httpsession缓存了cachesession。spring的配置文件中加上<bean id="sessionProvider" class="cn.itcast.common.web.session.CacheSessionProvider">
<property name="expiry" value="60"/>
</bean>
160527、项目上线后session(远程session)的更多相关文章
- 项目上线后出现Bug,该如何处理?
项目在上线之后又出现了Bug,这让很多测试人员和开发人员头痛.但很多时候线上Bug普遍地存在,不可避免. 任何项目都存在未发现 Bug 和 已发现 Bug 两种情况,不存在没有 Bug的情况. 即 ...
- 如何保证前端项目上线后的安全?webfunny已总结前端最关键的12大指标
实时监控大屏 众所周知:实时流量大屏,是用来监控前端项目上线质量的. 如大家所知,监控系统会监控线上应用的各项指标,如:错误.白屏.耗时等等,但是仔细一想,即使有这些监控,我们也不一定能够保证线上 ...
- 项目、地铁/公交、游戏签到、项目上线后发现新bug该怎么处理
项目:1.提前分配好业务(每个人该干什么 )2.提前召开会议3.提前挑好人4.准备项目思维导图5.提前审阅项目6.为确保项目按期交付 把控好时间7.给员工提前打好招呼 (提醒加班)8.建立好安全机制9 ...
- 记一次项目上线后Log4j2不输出日志的坑
公司项目采用了Log4j2来输出日志,在开发环境和测试环境下均可以输出日志,但在生成环境就没有日志输出.开始毫无头绪,后来通过不断的排查,终于解决了这个问题.在此记录下该问题的解决过程,便于后 ...
- laravel5 项目上线后务必将开发环境更改为生产环境
如果以开发环境上线,出错信息将全通过json暴露出来了,屏蔽方式如下: .env 文件设置如下APP_ENV=productionAPP_DEBUG=false 改完设置后把缓存清理一遍 如果更改后清 ...
- Vue项目上线后刷新报错404问题(apache,nginx,tomcat)
转自:https://www.cnblogs.com/sxshaolong/p/10219527.html 很简单,需要 服务器端 加个配置文件,然后 重启服务就好了,记住一定要 重启服务,否则无效!
- 项目上线后,遇到IE浏览器不显示大部分组件的问题
document.addEventListener('touchmove',(evt)=>{ }) 以上是ES6 语法,箭头函数,当然在IE下是不行的啦. 所以改为:ES5语法 document ...
- 修改记录-优化后(springboot+shiro+session+redis+ngnix共享)
1.普通用户实现redis共享session 1.配置 #cache指定缓存类型 spring.cache.type=REDIS #data-redis spring.redis.database=1 ...
- MVC4.0中项目发布遇到IE11时session存入URL中,导致记不住密码的问题
///MVC4.0中项目发布遇到IE11时session存入URL中,导致记不住密码的问题,在webconfig中配置<system.web><authentication mode ...
随机推荐
- atitit.科技公司的超级武器--超级框架,到底要不要自己的框架??
atitit.科技公司的超级武器--超级框架,到底要不要自己的框架?? 我们生活的时代,,任何一个时代,总有人会以经济之类的理由劝阻人向未知领域探索,基本上,他们的理由无非几种: 1.把钱投到更需要的 ...
- atitit.设计文档---操作日志的实现
atitit.设计文档---操作日志的实现 日志查询 1 ----mybatis 配置... 1 添加日志 1 日志查询 <a class="l-link" href=&q ...
- Intel 5 6 7 8系列芯片组介绍
Intel 5 6 7 8系列芯片组介绍 Iknow.2015-11-05 22:40|知识编号:122257 操作步骤: [Inetl 5.6.7.8系列芯片组介绍] 芯片组是主板电路的核心.一定意 ...
- Windows 7 Path环境变量255限制的解决办法,SUBST
C:\Users\xxx>subst /? Associates a path with a drive letter. SUBST [drive1: [drive2:]path] SUBST ...
- 466. Count Linked List Nodes【Naive】
Count how many nodes in a linked list. Example Given 1->3->5, return 3. 解法一: /** * Definition ...
- sass 的使用
普通变量 ? 1 $fontSize:12px; 默认变量 ? 1 $fontSize:12px; !default; 变量覆盖:只需要在默认变量之前重新声明下变量即可 ? 1 2 $fontSize ...
- 整合hibernate的lucene大数据模糊查询
大数据模糊查询lucene 对工作单使用 like模糊查询时,实际上 数据库内部索引无法使用 ,需要逐条比较查询内容,效率比较低在数据量很多情况下, 提供模糊查询性能,我们可以使用lucene全文 ...
- django 文件上传(阿里云oss)下载(支持大文件下载)
1.文件上传 Models 设计 class Upload_File(models.Model): image = models.FileField(upload_to='file/%Y/%m',de ...
- location.href 不响应的解决方法
在某些时候修改元素的值的时候过快会导致失效 1.window.open("","_blank") 代替 不过也是打开新窗口 2.延迟调用location.hr ...
- 跟着百度学PHP[13]-文件处理 文件后缀验证、设置随机文件名....
目录: 文件的处理:00x1 判断错误 文件的处理:00x2 判断类型 文件的处理:00x3 文件大小 ++++++++++++++++++++++++++++++++++++++++++++++++ ...