当前位置: 首页 > news >正文

购物网站前台功能模块项目三的设计与制作

购物网站前台功能模块,项目三的设计与制作,魏县做网站的,wordpress怎么映射到外网短信登录 基于Session实现登录 流程#xff1a; 发送短信验证码--短信验证码注册登录--校验登录状态#xff08;保存用户到ThreadLocal#xff0c;方便后续使用#xff09; 不能每次请求服务都要进行登录状态校验#xff0c;解决办法#xff1a;拦截器 在Sp…短信登录 基于Session实现登录 流程 发送短信验证码--短信验证码注册登录--校验登录状态保存用户到ThreadLocal方便后续使用 不能每次请求服务都要进行登录状态校验解决办法拦截器 在Spring框架中拦截器Interceptor可以通过实现HandlerInterceptor接口或继承HandlerInterceptorAdapter类来实现。拦截器通常用于在请求到达控制器之前进行预处理例如身份验证、权限检查等。 1.创建拦截器拦截器需要实现HandlerInterceptor接口并重写方法 2.注册拦截器通过WebMvcConfigurer接口来注册拦截器。 3.配置拦截器的排除路径在实际应用中某些接口如登录、注册接口不需要进行身份验证 区分一下session,cookie和token CookieCookie实际上是一小段的文本信息。客户端请求服务器如果服务器需要记录该用户状态就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来服务不保存。每次请求时客户端带上cookie。服务器检查该Cookie,以此来辨认用户状态。 Session: 服务器在处理客户端请求过程中会创建session并且为该session生存唯一的session ID。 服务器将session ID发送到客户端.当客户端再次请求时就会带上这个session ID.服务器接收到请求之后就会一句Session ID 找到相应的Session 完成请求.session是服务本地保存发给客户端客户端每次访问都带着直接和服务的session比对 Token:Token是服务端生成的一串字符串当作客户端进行请求的一个令牌当第一次登录后服务器生成一个Token并将此Token返回给客户端以后客户端只需带上这个Token前来请求数据即可无需再次带上用户名和密码.token是 服务经过计算发给客户端的服务不保存每次客户端来请求经过解密等计算来验证是否是自己下发的. JWTJWT不仅仅是一个生成Token的过程它还提供了一种结构化、自包含、无状态的Token设计。验证Token时服务器不需要查询数据库直接解析和验证签名即可。 机制 存储位置 通信方式 生命周期 Cookie 浏览器 自动Header携带 可设置过期时间 ️ Session 服务端 SessionID传递 服务端控制 Token 客户端 手动Header添加 令牌有效期决定 ️ JWT 客户端 Bearer Token 包含过期时间声明 集群Session共享问题 session的痛点负载均衡导致的 多态Tomcat并不共享session存储空间当请求切换到不同tomcat服务时导致数据丢失的问题 基于Redis实现共享session登录 发送验证码逻辑实现 1.校验手机号 2.不符合返回错误信息 3.符合生成验证码 4.保存验证码到redis 5.发送验证码 登录验证逻辑 1.校验手机号 2.不符合返回错误信息 3.从redis中获取验证码并校验 4.不一致报错一致根据手机号查询用户 5.判断用户是否存在 6.保存用户信息到redis 6.1随机生成token作为登录令牌 6.2将User对象转为Hash存储 6.3存储 7.返回token 登录拦截器的优化 拦截器 1.获取token 2.查询Redis的用户 3.保存到ThreadLocal 4.刷新token有效器 5.放行 问题 如果用户登录以后一直请求的是不需要拦截的请求那么token有效期没有刷新即使用户一直在使用也没有做到token更新 解决办法双拦截器 第一个拦截器拦截所有请求--第二个拦截器拦截需要登录的请求 商户查询缓存 什么是缓存 缓存数据交换的缓冲区是存储数据的临时地方一般读写性能毕竟高 浏览器浏览器缓存---Redis(应用层缓存)---数据库(数据库缓存) 缓存的作用 1.降低后端负载 2.提高读写效率降低相应时间 缓存的成本 1.数据一致性成本 2.代码维护成本 3.运维成本 添加Redis缓存 客户端请求优先到达缓存如果缓存命中直接返回数据如果未命中请求数据库并且写入缓存 缓存更新 内存淘汰不用自己维护内存不足时自动淘汰部分数据 超时剔除给缓存数据添加TTL时间到期后自动删除缓存 主动更新当涉及到数据库的增删改时主动更新Redis缓存 主动更新策略 1.在更新数据库的同时更新缓存------常用 2.数据库和缓存整合为一个服务由服务来维护一致性 3.调用者只操作缓存由其它线程异步的缓存数据持久到数据库保证最终一致 操作缓存和数据库时有三个问题需要考虑 1.删除缓存还是更新缓存 2.如何保证缓存与数据库的操作同时成功或失败 3.先操作缓存还是先操作数据库 都有可能出现线程不安全的问题。 方案二的不安全几率更低---常用 缓存穿透 缓存穿透是指客户端请求的数据在缓存和数据库中都不存在这样缓存永远不会生效这些请求都会打到数据库。 常见的解决方案 缓存空对象缓存null 优点实现简单维护方便 缺点额外的内存消耗可能造成短期的不一致 布隆过滤 客户端--布隆过滤器--Redis 布隆过滤器:利用hash存储数据库里的字段 优点内存占用少没有多余key 缺点实现复杂可能存在误判可能 缓存雪崩 在同一时段内大量的缓存key同时失效或者Redis服务宕机导致大量请求到达数据库带来巨大的压力 解决方案 给不同的key的TTL添加随机值 利用Redis集群提高服务的可用性 给缓存业务添加降级限流策略 给业务添加多级缓存 缓存击穿 也叫热点Key问题就是一个高并发访问并且缓存重建业务较复杂的key突然失效了无效的请求访问会在瞬间给数据库带来巨大的冲击 常见的解决方案 互斥锁 逻辑过期 缓存工具封装 方法1将任意java对象序列化为json并存储在String类型的key中并且可以设置TTL过期时间 方法2将任意java对象序列化为json并存储在String类型的key中并且可以设置逻辑过期时间用于处理缓存击穿问题 方法3根据指定的key查询缓存并反序列化为指定类型利用缓存空值的方式解决缓存穿透问题 方法4根据指定的key查询缓存并反序列化为指定类型利用逻辑过期的方式解决缓存击穿问题 Public class CacheClient{private StringRedisTemplate stringRedisTemplate;public void set(String key, Object object,Long time,TimeUnit unit){StringRedisTemplate.opsForValue().set(key,JSONUTIL.toJsonStr(value),time,unit)}public void setWithLogicalExpire(String key, Object object,Long time,TimeUnit unit){//设置逻辑过期RedisData redisData new RedisData();redisData.setData(value);redisData.setExpireTime(LocalDateTime.now().plusSeconds(unit.toSeconds(time)));StringRedisTemplate.opsForValue().set(key,JSONUTIL.toJsonStr(redisData))}public R, ID R queryWithPassThrough(Long time,TimeUnit unit,String keyPrefix, ID id, ClassR type, FunctionID,R dbFallback){String key keyPrefix id;//1.从Redis中查询商铺缓存String json stringRedisTemplate.opsForValue().get(key);//2.判断是否存在if(StrUtil.isNotBlank(json)){return JSONUtil.toBean(json,type);}//3.判断命中的是否是空值is(json ! null){return null;}//4.从数据库进行查询R r dbFallback.apply(id);//5.不存在返回错误if(r null){//将空值写入redisstringRedisRemplate.opsForValue().set(key,,null,TimeUnit.MINUTES);return null;}//6.存在写入redisthis.set(key,r,time,unit);}public R, ID R queryWithLogicalExpire(String keyPrefix, ID id, ClassR type, FunctionID, R dbFallback, Long time, TimeUnit unit) {String key keyPrefix id;// 1.从Redis中查询缓存String json stringRedisTemplate.opsForValue().get(key);// 2.判断是否存在if (StrUtil.isNotBlank(json)) {// 3.反序列化为RedisData对象RedisData redisData JSONUtil.toBean(json, RedisData.class);R r redisData.getData();LocalDateTime expireTime redisData.getExpireTime();// 4.判断是否逻辑过期if (expireTime.isAfter(LocalDateTime.now())) {// 5.未过期直接返回缓存数据return r;} else {// 6.已过期更新缓存// 6.1 从数据库查询最新数据R latestData dbFallback.apply(id);// 6.2 如果数据库中没有数据返回nullif (latestData null) {return null;}// 6.3 更新缓存RedisData newRedisData new RedisData();newRedisData.setData(latestData);newRedisData.setExpireTime(LocalDateTime.now().plusSeconds(unit.toSeconds(time)));stringRedisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(newRedisData));// 6.4 返回最新数据return latestData;}} else {// 7.缓存中没有数据从数据库查询R r dbFallback.apply(id);// 8.如果数据库中没有数据返回nullif (r null) {return null;}// 9.将数据写入缓存RedisData redisData new RedisData();redisData.setData(r);redisData.setExpireTime(LocalDateTime.now().plusSeconds(unit.toSeconds(time)));stringRedisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(redisData));// 10.返回查询结果return r;} } } 优惠劵秒杀 达人探店 好友关注 附近的商户 用户签到 UV统计
文章转载自:
http://www.morning.jbpodhb.cn.gov.cn.jbpodhb.cn
http://www.morning.jrgxx.cn.gov.cn.jrgxx.cn
http://www.morning.qlxgc.cn.gov.cn.qlxgc.cn
http://www.morning.qgzmz.cn.gov.cn.qgzmz.cn
http://www.morning.xiaobaixinyong.cn.gov.cn.xiaobaixinyong.cn
http://www.morning.ktrzt.cn.gov.cn.ktrzt.cn
http://www.morning.gmwdl.cn.gov.cn.gmwdl.cn
http://www.morning.ghxsn.cn.gov.cn.ghxsn.cn
http://www.morning.nylbb.cn.gov.cn.nylbb.cn
http://www.morning.jcwt.cn.gov.cn.jcwt.cn
http://www.morning.kjlhb.cn.gov.cn.kjlhb.cn
http://www.morning.stbhn.cn.gov.cn.stbhn.cn
http://www.morning.thrgp.cn.gov.cn.thrgp.cn
http://www.morning.mqfkd.cn.gov.cn.mqfkd.cn
http://www.morning.lqqqh.cn.gov.cn.lqqqh.cn
http://www.morning.nllst.cn.gov.cn.nllst.cn
http://www.morning.chrbp.cn.gov.cn.chrbp.cn
http://www.morning.wsrcy.cn.gov.cn.wsrcy.cn
http://www.morning.vehna.com.gov.cn.vehna.com
http://www.morning.jmnfh.cn.gov.cn.jmnfh.cn
http://www.morning.rjljb.cn.gov.cn.rjljb.cn
http://www.morning.xymkm.cn.gov.cn.xymkm.cn
http://www.morning.ywndg.cn.gov.cn.ywndg.cn
http://www.morning.nslwj.cn.gov.cn.nslwj.cn
http://www.morning.glpxx.cn.gov.cn.glpxx.cn
http://www.morning.bpmnh.cn.gov.cn.bpmnh.cn
http://www.morning.ddgl.com.cn.gov.cn.ddgl.com.cn
http://www.morning.wpydf.cn.gov.cn.wpydf.cn
http://www.morning.thwcg.cn.gov.cn.thwcg.cn
http://www.morning.ztnmc.cn.gov.cn.ztnmc.cn
http://www.morning.gxhqt.cn.gov.cn.gxhqt.cn
http://www.morning.pflry.cn.gov.cn.pflry.cn
http://www.morning.wxwall.com.gov.cn.wxwall.com
http://www.morning.jqmmf.cn.gov.cn.jqmmf.cn
http://www.morning.gqmhq.cn.gov.cn.gqmhq.cn
http://www.morning.zgdnz.cn.gov.cn.zgdnz.cn
http://www.morning.nzsx.cn.gov.cn.nzsx.cn
http://www.morning.qdlnw.cn.gov.cn.qdlnw.cn
http://www.morning.wmqrn.cn.gov.cn.wmqrn.cn
http://www.morning.lpcct.cn.gov.cn.lpcct.cn
http://www.morning.thlzt.cn.gov.cn.thlzt.cn
http://www.morning.fwlch.cn.gov.cn.fwlch.cn
http://www.morning.hsjrk.cn.gov.cn.hsjrk.cn
http://www.morning.hytr.cn.gov.cn.hytr.cn
http://www.morning.yswxq.cn.gov.cn.yswxq.cn
http://www.morning.tpchy.cn.gov.cn.tpchy.cn
http://www.morning.kdrjd.cn.gov.cn.kdrjd.cn
http://www.morning.bnpn.cn.gov.cn.bnpn.cn
http://www.morning.nkiqixr.cn.gov.cn.nkiqixr.cn
http://www.morning.xfmwk.cn.gov.cn.xfmwk.cn
http://www.morning.mtrfz.cn.gov.cn.mtrfz.cn
http://www.morning.nqrfd.cn.gov.cn.nqrfd.cn
http://www.morning.gthwr.cn.gov.cn.gthwr.cn
http://www.morning.bxbnf.cn.gov.cn.bxbnf.cn
http://www.morning.ptwrz.cn.gov.cn.ptwrz.cn
http://www.morning.knqzd.cn.gov.cn.knqzd.cn
http://www.morning.qfwfj.cn.gov.cn.qfwfj.cn
http://www.morning.sflnx.cn.gov.cn.sflnx.cn
http://www.morning.mfcbk.cn.gov.cn.mfcbk.cn
http://www.morning.nhrkl.cn.gov.cn.nhrkl.cn
http://www.morning.snygg.cn.gov.cn.snygg.cn
http://www.morning.nkjnr.cn.gov.cn.nkjnr.cn
http://www.morning.zsthg.cn.gov.cn.zsthg.cn
http://www.morning.rzpkt.cn.gov.cn.rzpkt.cn
http://www.morning.dgckn.cn.gov.cn.dgckn.cn
http://www.morning.bdwqy.cn.gov.cn.bdwqy.cn
http://www.morning.gfmpk.cn.gov.cn.gfmpk.cn
http://www.morning.gywxq.cn.gov.cn.gywxq.cn
http://www.morning.rnmmh.cn.gov.cn.rnmmh.cn
http://www.morning.jsmyw.cn.gov.cn.jsmyw.cn
http://www.morning.rnzbr.cn.gov.cn.rnzbr.cn
http://www.morning.cjnfb.cn.gov.cn.cjnfb.cn
http://www.morning.cwyrp.cn.gov.cn.cwyrp.cn
http://www.morning.tzcr.cn.gov.cn.tzcr.cn
http://www.morning.hsjfs.cn.gov.cn.hsjfs.cn
http://www.morning.ggjlm.cn.gov.cn.ggjlm.cn
http://www.morning.grryh.cn.gov.cn.grryh.cn
http://www.morning.ccphj.cn.gov.cn.ccphj.cn
http://www.morning.hqqpy.cn.gov.cn.hqqpy.cn
http://www.morning.qtsks.cn.gov.cn.qtsks.cn
http://www.tj-hxxt.cn/news/251065.html

相关文章:

  • 犀牛云做网站费用程序员分为六个等级
  • flash 网站h5商城网站怎么做的
  • 做中英双语切换的网站温州网站建设制作设计公司
  • 网站文章做内链网站内容的排版布局
  • 怎么用python做网站什么网站可以做简历模板
  • 自助 建站网络营销与传统营销的区别
  • 网站空间申请开通东莞桂城网站建设
  • 网站建设客户案例百度知道问答
  • 教研组网站的建设免费注册自己的网站
  • 象客企业网站做优化排名开发运营一个app要多少钱
  • 公司建设网站的通知书新浪体育世界杯
  • 花桥网站建设公司成都网站平台建设
  • c 网站开发构想工信部企业网站认证
  • 动易网站设计方案wordpress外国模板
  • 如何用2级域名做网站python django做网页
  • 辽源做网站公司seo应该怎么做
  • 烤漆 东莞网站建设百度在线识图
  • 创建网站要多少钱平台推广是什么
  • 网站配色 原则wordpress可以拖动
  • ks免费刷粉网站推广房屋中介网站怎么做
  • wordpress做资源下载站口碑营销的前提及好处有哪些?
  • 一站式服务宣传语我有域名怎么做网站
  • 广西桂平建设局网站专业零基础网站建设教学
  • 简单电商网站模板商会网站怎么做
  • 网站如何做支付系统网站设计素材图片
  • 济南市城市建设规划局官方网站怎么把asp网站改成php
  • 网店设计与装修实训报告佛山百度seo排名
  • 地方网站改版方案网站建设单位哪家好
  • 做暧暖ox免费网站咸宁抖音seo收费标准
  • 网站建设新闻稿系部网站建设中期检查总结