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

物流门户网站开发wordpress 微信 支付

物流门户网站开发,wordpress 微信 支付,网站描述怎么设置,wordpress标签增加彩色背景深入了解Redis-实战篇-短信登录 一、故事背景二、知识点主要构成2.1、短信登录2.1.1、生成随机短信验证码引入maven依赖生成验证码 2.1.2、实现登录校验拦截器2.1.3、基于Redis实现短信登录2.1.3.1、发送验证码时存入Redis2.1.3.2、登录时校验验证码 2.1.4、解决状态登录刷新的… 深入了解Redis-实战篇-短信登录 一、故事背景二、知识点主要构成2.1、短信登录2.1.1、生成随机短信验证码引入maven依赖生成验证码 2.1.2、实现登录校验拦截器2.1.3、基于Redis实现短信登录2.1.3.1、发送验证码时存入Redis2.1.3.2、登录时校验验证码 2.1.4、解决状态登录刷新的问题 三、总结提升 一、故事背景 最近在系统的回顾redis相关的知识总结成系列博客方便回顾也希望大家能给出意见帮助我更快的成长本篇博客主要介绍使用Redis如何实现短信登录功能 系列 深入了解Redis-基础篇 二、知识点主要构成 2.1、短信登录 2.1.1、生成随机短信验证码 引入maven依赖 Hutool是一个小而全的Java工具类库通过静态方法封装降低相关API的学习成本提高工作效率使Java拥有函数式语言般的优雅让Java语言也可以“甜甜的”。 Hutool的目标是使用一个工具方法代替一段复杂代码从而最大限度的避免“复制粘贴”代码的问题彻底改变我们写代码的方式。 !--hutool--dependencygroupIdcn.hutool/groupIdartifactIdhutool-all/artifactIdversion5.7.17/version/dependency生成验证码 一般随机数每个公司都会自己的生成规则,包括个数,生成方式大家只需要知道使用hutool也可以简单快速生成随机数即可 部分生成方式如下 引入hutool包之后直接使用RandomUtil类的随机数字方法生成就可以了还可自定义生成位数 //生成验证码 String code RandomUtil.randomNumbers(6); RandomUtil.randomString(10) //小写字母数字 RandomUtil.randomStringUpper(10) //大写字母数字 RandomUtil.randomNumbers(10) //数字 RandomUtil.randomStringWithoutStr(10,0123456789) //不含有0123456789 RandomUtil.randomString(abc,10) //只含有abc RandomUtil.randomChar() // 生成小写字母数字中一个字符 RandomUtil.randomNumber() // 生成0123456789中一个字符 RandomUtil.randomChar(-!?) // 生成-!?中一个字符这里以6位为例使用String code RandomUtil.randomNumbers(6); 2.1.2、实现登录校验拦截器 public class LoginInterceptor implements HandlerInterceptor {Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 1.判断是否需要拦截ThreadLocal中是否有用户if (UserHolder.getUser() null) {// 没有需要拦截设置状态码response.setStatus(401);// 拦截return false;}// 有用户则放行return true;} }2.1.3、基于Redis实现短信登录 2.1.3.1、发送验证码时存入Redis public Result sendCode(String phone, HttpSession session) {// 1.校验手机号if (RegexUtils.isPhoneInvalid(phone)) {// 2.如果不符合返回错误信息return Result.fail(手机号格式错误);}// 3.符合生成验证码String code RandomUtil.randomNumbers(6);// 4.保存验证码到 sessionstringRedisTemplate.opsForValue().set(LOGIN_CODE_KEY phone, code, LOGIN_CODE_TTL, TimeUnit.MINUTES);// 5.发送验证码log.debug(发送短信验证码成功验证码{}, code);// 返回okreturn Result.ok();}2.1.3.2、登录时校验验证码 这里首先对手机号进行格式校验通过后从Redis获取验证码并校验通过后去查询该用户如果存在直接将用户信息存到redis中如果不存在则先去执行注册操作进行注册之后将用户信息存入Redis中方便下次获取 public Result login(LoginFormDTO loginForm, HttpSession session) {// 1.校验手机号String phone loginForm.getPhone();if (RegexUtils.isPhoneInvalid(phone)) {// 2.如果不符合返回错误信息return Result.fail(手机号格式错误);}// 3.从redis获取验证码并校验String cacheCode stringRedisTemplate.opsForValue().get(LOGIN_CODE_KEY phone);String code loginForm.getCode();if (cacheCode null || !cacheCode.equals(code)) {// 不一致报错return Result.fail(验证码错误);}// 4.一致根据手机号查询用户 select * from tb_user where phone ?User user query().eq(phone, phone).one();// 5.判断用户是否存在if (user null) {// 6.不存在创建新用户并保存user createUserWithPhone(phone);}// 7.保存用户信息到 redis中// 7.1.随机生成token作为登录令牌String token UUID.randomUUID().toString(true);// 7.2.将User对象转为HashMap存储UserDTO userDTO BeanUtil.copyProperties(user, UserDTO.class);MapString, Object userMap BeanUtil.beanToMap(userDTO, new HashMap(),CopyOptions.create().setIgnoreNullValue(true).setFieldValueEditor((fieldName, fieldValue) - fieldValue.toString()));// 7.3.存储String tokenKey LOGIN_USER_KEY token;stringRedisTemplate.opsForHash().putAll(tokenKey, userMap);// 7.4.设置token有效期stringRedisTemplate.expire(tokenKey, LOGIN_USER_TTL, TimeUnit.MINUTES);// 8.返回tokenreturn Result.ok(token);}2.1.4、解决状态登录刷新的问题 这里主要利用Redis实现和session一样的功能用户每次访问都会刷新该用户的token在redis中的有效时间 Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//请求头中获取tokenString token request.getHeader(authorization);if (StrUtil.isBlank(token)){// 不存在response.setStatus(401);// 拦截return false;}String key RedisConstants.LOGIN_USER_KEY;//基于token从redis中获取用户MapObject,Object userMap stringRedisTemplate.opsForHash().entries(key token);if (userMap.isEmpty()){// 不存在response.setStatus(401);// 拦截return false;}UserDTO userDTO BeanUtil.fillBeanWithMap(userMap,new UserDTO(),false);//保存用户信息到ThreadLocalUserHolder.saveUser(userDTO);stringRedisTemplate.expire(key,RedisConstants.LOGIN_USER_TTL, TimeUnit.MINUTES);//放行return true;}三、总结提升 短信验证码修改为以手机号为key验证码为value保存在redis中在用户使用手机号登录时获取redis中的验证码和请求参数中的验证码比对一致则去库里查该手机号的用户是否存在不存在则新建用户并把该用户对象存在在redis中。校验登录状态是使用HandlerInterceptor拦截器实现的在此之前需要配置拦截哪些请求不拦截哪些请求从客户端的请求头中获取token信息并从redis中获取用户信息 为空返回401状态不为空则把用户信息存储在ThreadLocal中还把验证码和用户信息设置有效时间时间一过则退出用户登录。在请求处理完之后销毁用户信息。 如果本篇博客对您有一定的帮助大家记得留言点赞收藏哦。
http://www.hkea.cn/news/14325842/

相关文章:

  • 开发一个网站的过程是什么北京千锋教育培训机构怎么样
  • 网站定制哪个好用什么网站做浏览器主页
  • vs可以做网站吗建立一个网站大约要多少钱
  • 桂林网站制作人才招聘南阳企业网站seo
  • 为什么网站开发需要写php网站优化公司哪家好
  • 福州网站设计软件公司企业建设网站的
  • 市桥做网站的公司虚拟网站服务器
  • 网站无障碍建设报告高级软件工程师
  • 建网站 温州手机网站和电脑网站跳转
  • 虹口品牌网站建设北京医疗网站建设公司排名
  • 怎样设计一个移动网站动漫网站设计源代码
  • 福建厦门网站建设公司自媒体平台注册入口快看点
  • 装修网站建设优缺点龙岗商城网站建设教程
  • 国内出名的校园文化建设网站有哪些跨境电商要投资多少钱
  • 网页做得好的网站公众号微信
  • 建企业版网站多久php网站开发工程师任职要求
  • 淘宝网站设计价格外贸型网站开发
  • 西安网站seo技术apache添加网站
  • 外贸网站建站推广知名的建站公司
  • 建瓯网站建设wzjseo搭建网站需要什么技术
  • wordpress可视化编辑器 windows南昌网站优化
  • seo 服务深圳防疫措施优化调整
  • 信阳建设网站软件开发工具分类
  • 《c程序设计》精品课程网站建设江苏省建设厅网站怎么登不上
  • 网站建设与维护试卷分析中国备案查询网站
  • 响应式网站 htmlWordPress接入广告
  • 腾讯云网站建设教学视频乐高编程培训
  • 网站建设公司发展历程广州网站建设q479185700棒
  • 3合一网站怎么做示范校建设验收网站
  • 苏州营销网站建设公司哪家好手机版网站开发实例