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

网站怎么找回密码陕西锦宇建设有限公司网站

网站怎么找回密码,陕西锦宇建设有限公司网站,建设银行网站怎么登陆不了,关键词搜索工具爱站网文章目录 前言完成任务1. 项目了解2. 登录注册2.1 创建数据表2.2 验证码如果使用 Session 存储验证码#xff1a;不用 Session 存储验证码#xff0c;用 Redis 会有什么问题? 2.3 注册功能2.4 登录功能2.5 自动登录2.6 退出登录 总结 前言 本项目非原创#xff0c;我只是个… 文章目录 前言完成任务1. 项目了解2. 登录注册2.1 创建数据表2.2 验证码如果使用 Session 存储验证码不用 Session 存储验证码用 Redis 会有什么问题? 2.3 注册功能2.4 登录功能2.5 自动登录2.6 退出登录 总结 前言 本项目非原创我只是个小小白跟随 b 站脚步找到老罗的这个项目视频来源于 高仿B站(单服务版) springboot项目实战 easylive 本人不分享项目源码支持项目付费 完成任务 1. 项目了解 这是一个仿 b 站的项目页面分为客户端和后台管理端可发布视频在线互动评论、点赞、投币、发弹幕后台管理对视频进行审核。 项目采用微服务架构构建系统架构图 正常线上部署会有 nginx 集群本地上不存在 nginx 集群直接就是前端 —— 网关。有很多个服务服务跑起来后每个服务有一个端口但是这些服务的端口都不对外对外的端口只有一个就是 gateway 的端口。服务与服务之间存在相互调用。Nacos 实现服务发现注册、作为配置中心。微服务部署加上 nginx 集群的情况下将每个的配置抽离出来放在一个配置中心进行配置修改的时候不用一个个地去改只需要修改配置中心。 2. 登录注册 2.1 创建数据表 根据该系统的用户特点创建用户数据表。 为什么用邮箱发送验证码 而不使用手机号 手机号发送验证码需要做财务报表需要付费邮箱目前接收验证码不需要付费。对于一个小型的项目使用邮箱验证码就足够了。 注意创建表字段后某些字段可设置不为 NULL、主键、默认值还需要设计必要的索引。 2.2 验证码 如果使用 Session 存储验证码 后端将生成的验证码 code 保存到 Session 会话中当前端调用获取验证码的该接口时响应头 Set-Cookie 中会包含 JSESSIONID 如果此时在进行 register 注册时校验所填的验证码是否与刚刚存入 Session 的验证码相同发起的请求中也会携带这个 JSESSIONID JSESSIONID 就是一个会话的标记使用 Session 会返回一个 JSESSIONID 来标记这个会话下一次请求时就会携带这个 JSESSIONID判断这两个请求是否是同一个会话发出来的会话可认为是一个浏览器或者说新开的一个浏览器页面。如果是同一个会话校验验证码时就会获取存入当前会话 Session 中的验证码与前端填入的验证码进行比较如果不是同一个会话那么获取验证码请求和注册请求都不是同一个 JSESSIONID那么就不可能从 Session 中获取到刚刚存入的验证码。 不用 Session 存储验证码用 Redis 会有什么问题? 这里请求验证码时将验证码保存在 Redis 中设置过期时间为 10 分钟。 注册时获取 Redis 中的验证码与前端传入的验证码进行比对 比对成功返回 true不成功返回 false。 但是 这里有一个问题当用户 A 获取验证码 a 后将 a 存入 Redis此时另外一个用户 B 也获取验证码得到验证码 b Redis 会将最新获得的验证码 b 存入遮蔽掉先前存入的验证码 a。用户 A 输入他获得的验证码 a 进行校验后端就会从 Redis 中取出最新获得的 b 与之校验用户 A 就发现不匹配就会觉得疑惑明明输入是正确的为什么就是不匹配呢 原因就是 Redis 中存储验证码的 key 是定死了的就是 “checkCode”全站所有人都用的这一个 key每个人请求一下获取验证码的接口这个 key 的值就更新了。它不是一个用户的唯一标识。 所以说直接这样使用 Redis 来存储验证码是不可行的。 但就是要用 Redis 来存储验证码该怎么实现呢 让每个用户请求验证码时存入 Redis 的 key 是唯一的能唯一标识这个用户。可以随机生成一个随机数作为每个用户验证码的 key返回客户端数据时将对应的 key 也和验证码图片一起返回。 Redis 保存、获取和清除验证码的方法 UUID是 Java 中一个主要为对象生成一个唯一标识符的类 randomUUTD()生成一个随机的 UUID 对象由 128 位数字组成通常由 32 位十六进制表示中间用破折号连接。 controller 层调用 2.3 注册功能 先看 contoller 层中的参数 这里直接使用注解对方法参数进行校验。要使用 NotEmpty、Email、Size 这些注解需要在 Controller 类上加上 Validated 注解。 NotEmpty: 确保参数不为空。 Email: 确保字符串是一个有效的电子邮件地址。 Size: 确保字符串的长度不超过指定的最大值。 Pattern: 确保字符串符合指定的正则表达式。 密码的正则表达式通常是至少包含一个数字和一个英文字母密码长度在 8~18 之间可以包含特殊字符 public static final String REGEX_PASSWORD ^(?.*\\d)(?.*[a-zA-Z])[\\da-zA-Z~!#$%^*_]{8,18}$;service 层实现 用户 ID 使用工具类方法中随机生成字符串来实现 第一个生成指定长度的字符串可以包含字母和数字第二个生成指定长度的字符串不能包含字母。用户 ID 不需要字母使用的是第二个。 设置用户密码使用 MD5 加密 这里直接使用 Apache 库中的 DigestUtils 类计算给定字符串的 MD5 值。 2.4 登录功能 controller 层 需要获取用户的 IP 地址通过 HttpServletRequest 来获取用户 ip protected String getIpAddr() {HttpServletRequest request ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();String ip request.getHeader(x-forwarded-for);if (ip ! null ip.length() ! 0 !unknown.equalsIgnoreCase(ip)) {// 多次反向代理后会有多个ip值第一个ip才是真实ipif (ip.indexOf(,) ! -1) {ip ip.split(,)[0];}}if (ip null || ip.length() 0 || unknown.equalsIgnoreCase(ip)) {ip request.getHeader(Proxy-Client-IP);}if (ip null || ip.length() 0 || unknown.equalsIgnoreCase(ip)) {ip request.getHeader(WL-Proxy-Client-IP);}if (ip null || ip.length() 0 || unknown.equalsIgnoreCase(ip)) {ip request.getHeader(HTTP_CLIENT_IP);}if (ip null || ip.length() 0 || unknown.equalsIgnoreCase(ip)) {ip request.getHeader(HTTP_X_FORWARDED_FOR);}if (ip null || ip.length() 0 || unknown.equalsIgnoreCase(ip)) {ip request.getHeader(X-Real-IP);}if (ip null || ip.length() 0 || unknown.equalsIgnoreCase(ip)) {ip request.getRemoteAddr();}return ip;}sevice 层 之前是使用 Session 来存储用户登录后的标识在这里使用 token 来作为用户标识以便于用户登录后无需再重新登录可以继续访问。 这里返回的 TokenUserInfoDto 中除了用户相关信息还有 token 及其过期时间 JsonIgnoreProperties(ignoreUnknown true)注解无论传入的JSON数据中是否包含类中未定义的属性这些属性都会被忽略而不会导致反序列化失败。在这里非常有用如果说这个类中添加了其它属性这个注解能保证数据的反序列化不会失败。 Redis 中存储 token 和用户信息设置 token 值及其过期时间 还有一步将这个 token 手动地存入到 Cookie 中 其实获得 tokenUserInfoDto 后可以直接返回的返回给前端后前端去存放这个 token。但是为了保险我们也可以像 Session 一样Session 会在 Cookie 中存放一个 JSESSIONID这其实就是服务端的工作。我们也可以将 token 存放在 Session 中 成功访问 login 接口后可看到 Cookie 中会有 token 这样的话当前用户再次访问其它接口就不需要前端参与Cookie 会自动将 token 携带过来。 如果服务端还要获取 token 的话直接使用 Response 不太方便需要循环寻找因为 Cookie 中有很多东西获取 Cookie 得到的是一个数组还需要遍历数组才能拿到 token。 但是前端会从 Cookie 里把 token 解析出来然后放到 head 头中带过来这时候在后端就可以通过 RequestHeader(“token”) 拿到 token。 登录最后不能忘记还要清理掉 Redis 中的 验证码token 可清理也可不清理 2.5 自动登录 用户第一次成功登录后Cookie 中会存在一个 token设置的有效期为 7 天7 天以内打开这个页面应该是自动登录的 如果是 7 天以内再次登录还需要再此执行 saveTokenInfo重新生成一个 token并重新开始计算时间 并将这个重新生成的 token 存入 Cookie 中。 2.6 退出登录 退出登录需要做的就是清理掉 Cookie 和 Redis 中的 token 总结 一般来说一个项目的登录注册功能往往是这个项目动手写代码时第一个要做的功能。这部分功能包括验证码获取、注册、登录、自动登录、退出登录等。这段功能理解起来并不复杂重点就是对 Redis 数据的操作、细节的把控、以及代码书写规范。 在老罗的这个项目里通过登录注册功能就可以学到很多以前不太了解的知识尤其是 token 的使用Session 的理解。
http://www.tj-hxxt.cn/news/216933.html

相关文章:

  • 广州电商网站建设视频素材库网站免费
  • 网站开发有什么好的论坛湖南省住建厅官网信息公开
  • 郴州网站建设找哪家公司公司创建网站要多少钱
  • 黄石网站制作赣州九一人才网找工作
  • 专门做离异相亲的网站腾讯cos wordpress
  • 做影视网站引流维护一个网站的费用
  • 自己电脑做网站服务器违法吗wordpress 文章列表分页
  • 怎么看一个网站是否是外包做的哈尔滨网站搜索优化
  • 手机网站开发流程十堰秦楚网
  • 官方网站模版专业定制网站建设哪里有
  • 网站建设主要包括哪两个方面iis网站发布默认首页
  • 网站管理平台模板最好看免费观看高清大全西瓜
  • 茂名网站建设培训设计师培训机构有哪些
  • 广州网站开发定制设计吉利的广告公司名字
  • 山东专业网站解决方案制作艺术类考生有哪些专业
  • 天津网站建设开发怎么做流量网站
  • 360网站建设的目标是什么任城网络推广教程
  • 搜索引擎作弊的网站有哪些代理平台有哪些
  • 深圳网站设计实力乐云seo网站目录命名规则
  • 做网站关于我们wordpress游客发言
  • 广州空港经济区门户网站大连做网站孙晓龙
  • 公司做网站的意义网站备案 关闭
  • 海外免备案网站农村自建房100张图片
  • 哪里能找到免费网站浦东做网站的公司
  • 黄冈网站建设报价表app使用什么做的网站
  • 网站服务费可以做宣传费吗广东深圳软件开发公司
  • 网站备案域名转公司专业制作网站公司
  • 腾讯做的导购网站网上买东西有哪些平台
  • 福建注册建设中心网站网站建设应遵守的原则
  • 淘宝网站制作公司哪家好wordpress开发教程 pdf