?!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 午夜福利理论片高清在线观看,亚洲成av人影院,香蕉免费一区二区三区

亚洲精品92内射,午夜福利院在线观看免费 ,亚洲av中文无码乱人伦在线视色,亚洲国产欧美国产综合在线,亚洲国产精品综合久久2007

?div class="header_top">
Java知识分n|?- L学习(fn)从此开始!    
SpringBoot+SpringSecurity+Vue+ElementPlus权限pȝ实战评 震撼发布        

最新Java全栈׃实战评(免费)

AI人工学习(fn)大礼?/h2>

IDEA怹Ȁz?/h2>

66套java实战评无套路领?/h2>

锋哥开始收Java学员啦!

Python学习(fn)路线?/h2>

锋哥开始收Java学员啦!

Tomcat集群Session׃n PDF 下蝲


旉:2020-08-28 12:44来源:http://www.sh6999.cn 作?锋  侉|举报
Tomcat集群Session׃n PDF 下蝲
失效链接处理
Tomcat集群Session׃n PDF 下蝲


 
本站整理下蝲Q?/strong>
链接Q?a target="_blank">https://pan.baidu.com/s/1eszvEe5mPRc79j7ZlE35xg 
提取码:n7dp
 
相关截图Q?/strong>
 
主要内容Q?/strong>

问题由来解决Ҏ(gu)
1. ZCookie+Redis+Filter解决Ҏ(gu)实现q程优缺点踩?/div>
2. Tomcat内置的Session复制Ҏ(gu)实现q程优缺?/div>
3. 使用Session_滞Ҏ(gu)实现形式优缺?/div>
4. ZSession持久化方?/div>
5. ZSpring-Session无R入性方案实现过E优~点
t坑l语
问题由来
当我们的业务使用单个Tomcat不以支持访问请求的时候,需要引入Tomcat集群。而每个Tomcat的Session是不互通的Q如果用L(fng)h落入C同的Tomcat中,用户需要频J的dQ给用户造成困扰。所以,在一个应用服务器产生Session之后Q应该让其他应用服务器也能够获取刎ͼ也就是Session׃n?/div>
解决Ҏ(gu)
以下几种Ҏ(gu)有的是查资料扑ֈ的,q没有花Ҏ(gu)间去实现Q我们可以根据自q实际情况选择使用哪一U。个人比较們֐于第1和第5U方案,因ؓ(f)q?U比较亲?/div>
1. ZCookie+Redis+Filter解决Ҏ(gu)
用户d之后Q将Session Id和用户信息存储到Redis中,q添加一个CookieQ将该Session Id带到客户端。当发v其他h之后Q携带该CookieQ应用服务器获取到Session Id之后去Redis中查询是否存在,如果存在则l进行相关业务,否则提示用户未登录。U在Cookie中存攄户信息的方式直接Pass掉了?/div>
实现q程
 
 
dq程
public ServerResponse<User> login(String username, String password, HttpSession session, HttpServletResponse response){
    //获取数据库中的用户信?/div>
    ServerResponse<User> serverResponse = iUserService.login(username,password);
    if (serverResponse.isSuccess()){
        String sessionId = session.getId();
        //dCookie
        CookieUtil.writeCookie(response,sessionId);
        //sessionId和Json化的用户信息保存到分片的Redis?/div>
        RedisShardedUtil.setEx(sessionId, JsonUtil.obj2String(serverResponse.getData()), Const.RedisCache.SESSION_EXTIME);
    }
    return serverResponse;
}
 
 
h“Session”有效旉
假设“Session”的默认时间设|ؓ(f)半个时Q当我们d之后Q每ơ请求都应该Session的有效期讄为半个小时。否则的话,一到半个小?ldquo;Session”失效了用戯得重新登录。ؓ(f)了解册个问题,我们讄一个过滤器Q?/div>
public class SessionExpireFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
 
    }
 
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        //ServletRequest转换为HttpServletRequest
        HttpServletRequest request = (HttpServletRequest)servletRequest;
        String token = CookieUtil.readCookieValue(request);
        //如果token不ؓ(f)I的话,W合条gQ则获取user信息Quser不ؓ(f)I,则将redis~存中的session旉重置为指定时旉
        if(StringUtils.isNotBlank(token)){
            String userJsonStr = RedisShardedUtil.get(token);
            User user = JsonUtil.string2Obj(userJsonStr,User.class);
            if(user != null){
                //如果user不ؓ(f)I,则重|session的时_卌用expire命o
                RedisShardedUtil.expire(token, Const.RedisCache.SESSION_EXTIME);
            }
        }
        filterChain.doFilter(servletRequest,servletResponse);
    }
 
    @Override
    public void destroy() {
 
    }
}
 
------分隔U?---------------------------
?!-- //底部模板 -->