一、前言在做电商项目时很多同学会遇到这个问题1.单实例登录正常部署多台服务器后用户一会登录、一会未登录2.用 Nginx 负载均衡请求落到不同实例Session 不共享登录状态丢失3.用 JWT 无状态方案但 token 无法主动失效退出登录要等过期今天给你一套企业级通用的分布式 Session 共享方案用 Redis 存储 Session所有实例共享登录状态解决多节点部署问题代码直接复制就能用。二、引入依赖!--SpringSessionRedis--dependencygroupIdorg.springframework.session/groupIdartifactIdspring-session-data-redis/artifactId/dependency!--Redis客户端--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId/dependency三、Redis 配置application.ymlspring:redis:host:127.0.0.1port:6379password:database:0session:store-type:redis timeout:1800#Session超时时间单位秒30分钟四、开启 Redis Session启动类加注解importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;importorg.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;SpringBootApplicationEnableRedisHttpSession(maxInactiveIntervalInSeconds1800)publicclassShopApplication{publicstaticvoidmain(String[]args){SpringApplication.run(ShopApplication.class,args);}}五、登录接口和原来一样不用改业务代码PostMapping(/login)publicResultlogin(Stringusername,Stringpassword,HttpSessionsession){// 1. 校验用户名密码UseruseruserService.getByUsername(username);if(usernull||!passwordEncoder.matches(password,user.getPassword())){returnResult.fail(用户名或密码错误);}// 2. 登录成功存入 Sessionsession.setAttribute(userId,user.getId());session.setAttribute(username,user.getUsername());returnResult.success(登录成功);}六、登录校验拦截器Session 方式ComponentpublicclassLoginInterceptorimplementsHandlerInterceptor{OverridepublicbooleanpreHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler)throwsException{HttpSessionsessionrequest.getSession();ObjectuserIdsession.getAttribute(userId);if(userIdnull){response.setContentType(application/json;charsetUTF-8);response.getWriter().write(JSON.toJSONString(Result.fail(401,请先登录)));returnfalse;}returntrue;}}七、拦截器注册ConfigurationpublicclassWebConfigimplementsWebMvcConfigurer{OverridepublicvoidaddInterceptors(InterceptorRegistryregistry){registry.addInterceptor(newLoginInterceptor()).addPathPatterns(/**).excludePathPatterns(/login,/register,/error);}}八、效果演示1.多台服务器部署Session 存在 Redis 中所有实例共享2.用户在实例 A 登录请求落到实例 B 也能识别登录状态3.调用 session.invalidate() 直接清掉 Redis 中的 Session实现主动登出4.超时自动失效和单机 Session 体验完全一致九、适用场景1.电商系统集群部署2.前后端分离项目多实例3.需要主动失效登录状态的场景4.不想改业务代码从单机平滑升级到分布式十、优点对比十一、总结分布式 Session 共享是电商项目从单机走向集群的关键一步也是面试高频考点。这套方案完全兼容传统 Session API不用改业务代码就能实现分布式部署解决登录状态丢失问题毕设和企业项目都非常加分。互动引导你现在的电商项目是单机部署还是准备做集群评论区说说你的部署方式我帮你优化成分布式架构有用点赞 收藏关注我持续更新 SpringBoot 电商项目实战干货