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

做淘宝客网站用什么系统吗淮北论坛最新招聘

做淘宝客网站用什么系统吗,淮北论坛最新招聘,企业网站制作步骤,苏州建站免费模板Override public Result sendCode(String phone) { // 1.检验手机号 if (RegexUtils.isPhoneInvalid(phone)) { // 这里抛出异常和return fail有什么区别吗#xff1f;——— 有区别#xff0c;抛出异常会被全局异常处理器捕获#xff0c;返回fail不会 throw ne…Override public Result sendCode(String phone) { // 1.检验手机号 if (RegexUtils.isPhoneInvalid(phone)) { // 这里抛出异常和return fail有什么区别吗——— 有区别抛出异常会被全局异常处理器捕获返回fail不会 throw new RuntimeException(手机号格式不正确); } // 2.生成验证码 String code RandomUtil.randomNumbers(6); // 3.保存验证码到session ——— 保存到redis中,redis名字、值、过期时间、时间单位 // session.setAttribute(code, code); stringRedisTemplate.opsForValue().set(LOGIN_CODE_KEY phone, code, LOGIN_CODE_TTL, TimeUnit.MINUTES);// 4.发送验证码到手机 // 注意这里的log是lombok的Slf4j注解生成的不然只能写一个参数 log.debug(发送验证码{}到手机{}, code, phone); return Result.ok(); }这段代码是一个Java方法用于向指定的手机号发送验证码并处理相关逻辑。下面是对代码中关键部分的解释和你提到的几点疑问的解答 关于异常处理 当使用 throw new RuntimeException(手机号格式不正确); 时如果手机号格式验证失败会抛出一个运行时异常。这个异常如果没有被捕获会直接中断当前方法的执行并且如果项目中配置了全局异常处理器如Spring的ControllerAdvice这个异常会被全局异常处理器捕获然后按照全局异常处理器中定义的方式处理通常会转换成特定的错误响应给客户端。而如果直接 return Result.fail(手机号格式不正确); 假设Result类有这样一个静态方法表示操作失败并附带错误信息则是一种更直接的错误处理方式不涉及异常抛出直接通过返回值告知调用方操作失败及原因。这种方式适用于不需要中断程序执行流或者不需要全局统一处理该类型错误的场景。 保存验证码到Redis 代码中使用了Spring Data Redis的StringRedisTemplate来操作Redis数据库将生成的验证码保存到Redis中键为LOGIN_CODE_KEY phone这样做可以确保每个手机号对应的验证码存储是独立的并且设置了验证码的有效时间为LOGIN_CODE_TTL分钟这样可以自动清理过期验证码避免数据冗余和安全问题。 日志记录 使用Lombok的Slf4j注解自动生成的日志对象如log可以简化日志记录的代码。log.debug(...)语句会在调试模式下记录消息帮助开发者追踪验证码的发送过程包括发送的验证码内容和目标手机号。如果不使用Lombok则需要手动创建日志对象例如private static final Logger log LoggerFactory.getLogger(YourClassName.class); 总结来说这段代码实现了手机号格式校验、验证码生成、验证码存储至Redis以及日志记录的功能同时展示了在遇到错误时使用异常与直接返回错误结果两种不同处理方式的区别。 在代码片段中使用的Redis数据类型是 字符串(String)。具体体现在这一行代码 stringRedisTemplate.opsForValue().set(LOGIN_CODE_KEY phone, code, LOGIN_CODE_TTL, TimeUnit.MINUTES);这里opsForValue() 方法用于操作Redis中的字符串值。set 方法则用于设置键值对其中键是LOGIN_CODE_KEY phone值是生成的验证码code并且设置了过期时间LOGIN_CODE_TTL分钟。这种操作非常适合用来存储临时数据比如短信验证码因为字符串类型是Redis中最基本且灵活的数据类型能够存储任何二进制安全的数据包括数字、文本、甚至是序列化的对象。 Override public Result login(LoginFormDTO loginForm) { // 1.检验手机号 ——— 因为每个请求都是单独的使用还要再检查一次 String phone loginForm.getPhone(); if (RegexUtils.isPhoneInvalid(phone)) { return Result.fail(手机号格式错误); } // 2.检验验证码 -- 从redis中获取 // Object cacheCode session.getAttribute(code); String cacheCode stringRedisTemplate.opsForValue().get(LOGIN_CODE_KEY phone); String code loginForm.getCode(); if (cacheCode null || !cacheCode.equals(code)) { System.out.println(cacheCode cacheCode); return Result.fail(验证码错误); } // 3.检验用户是否存在 // 法1最简洁的用法但是有硬编码 // User user query().eq(phone, phone).one(); // 法2使用lambda表达式减少硬编码 // User user this.lambdaQuery().eq(User::getPhone, loginForm.getPhone()).one(); // 法3复杂一点但多了一个isNotBlank的动态查询 LambdaQueryWrapper queryWrapper new LambdaQueryWrapper(); queryWrapper.eq(StringUtils.isNotBlank(phone), User::getPhone, phone); User user userMapper.selectOne(queryWrapper); // 如果不存在则创建用户 if (user null) { user createUserWithPhone(phone); }// 4.保存用户到session -- 保存到token中 // session.setAttribute(user, BeanUtil.copyProperties(user, UserDTO.class)); String token UUID.randomUUID().toString(true); UserDTO userDTO BeanUtil.copyProperties(user, UserDTO.class); // 因为user的id是long类型的但是StringRedisTemplate只支持String类型的key-value因此要需要⾃定义map映射规将user转成map后进⾏hash存储 // userDTO要转换为Map的Java对象 new HashMap()存储转换后的Map的容器 MapString, Object userMap BeanUtil.beanToMap(userDTO, new HashMap(), // 忽略userDTO对象中的空值属性即那些值为null的属性不会被放入userMap中 CopyOptions.create().setIgnoreNullValue(true) // 将属性值放入userMap前将属性值转换为其字符串表示形式 .setFieldValueEditor((fieldName, fieldValue) - fieldValue.toString()));// 5.存储 String tokenKey LOGIN_USER_KEY token; stringRedisTemplate.opsForHash().putAll(tokenKey, userMap); // 设置过期时间 stringRedisTemplate.expire(tokenKey, LOGIN_USER_TTL, TimeUnit.MINUTES); return Result.ok(token); }该段Java代码是一个登录方法的实现主要功能是验证用户通过手机号和验证码登录。以下是关键步骤的解析 校验手机号格式首先使用正则表达式验证传入的手机号是否合法。 校验验证码从Redis中根据手机号取出之前保存的验证码使用stringRedisTemplate.opsForValue().get(LOGIN_CODE_KEY phone)并与用户提交的验证码进行比较。如果Redis中没有验证码或者不匹配则登录失败。 查询用户是否存在 使用Lambda表达式构建查询条件动态地检查手机号是否非空并据此查询数据库中的用户记录。这样做可以避免硬编码查询条件增加代码的灵活性和可维护性。如果用户不存在则通过createUserWithPhone(phone)方法创建新用户并保存到数据库。 用户认证成功处理 生成一个随机的UUID作为token。将查询到的用户实体转化为UserDTO对象然后进一步转化为一个Map这一步是为了方便以HashMap的形式存储到Redis中因为Redis的Hash数据结构适合存储对象。将用户信息以HashMap的形式存入Redis键为LOGIN_USER_KEY token并且设置相应的过期时间这样就实现了基于token的会话管理而不是传统的session。 返回结果最后返回一个包含生成的token的结果对象前端可以使用这个token来进行后续的认证请求。 此登录逻辑结合了安全性如验证码校验、灵活性动态查询构造以及扩展性使用token而非session管理用户状态是现代Web应用中常见的认证流程实现方式。 在上述登录方法中使用的Redis数据类型是Hash。 当用户登录成功后代码片段通过以下命令将用户信息存储到Redis中 stringRedisTemplate.opsForHash().putAll(tokenKey, userMap);这里opsForHash() 方法表明操作的是Redis的Hash数据结构。Hash允许我们将一个键关联到多个字段-值对非常适合用来存储对象其中键tokenKey代表了这个存储单元而userMap中的每个键值对则代表了用户的一个属性及其值。这种方式使得可以通过一个键快速访问到用户的所有信息并且便于单独修改或删除某个属性非常适合用于会话管理和用户信息的临时存储场景。此外通过设置过期时间还可以自动清理不再需要的会话信息保持Redis内存的有效利用。 为什么保存验证码用String类型保存用户信息用hash类型 在Redis中选择使用String类型存储验证码和Hash类型存储用户信息主要是基于以下考虑 验证码的特性 简单性验证码一般只是一个简短的字符串比如6位数字或字母组合其数据结构相对简单不需要复杂的字段关联。读写频繁验证码的生成和验证是高频率的操作每次验证后可能还需要清除或标记已使用的验证码。String类型提供了快速的读写能力适合这种简单且高频的访问模式。生命周期短验证码的有效期较短通常几分钟到几十分钟使用String类型可以直接设置键值对的过期时间实现自动清理过期数据简单高效。 用户信息的特性 结构化数据用户信息通常包含多个属性如用户名、密码、邮箱、电话等这些信息之间存在逻辑关联形成一个结构化的数据对象。更新灵活性用户信息可能需要部分更新例如修改密码或邮箱而不会影响其他信息。Hash类型允许对单个字段进行操作如HSET, HGET等提供了针对字段级别的操作能力非常适用于需要频繁更新或查询部分属性的场景。存储效率虽然理论上String也可以通过序列化整个对象来存储用户信息但这样做会导致每次读写都需要序列化和反序列化整个对象效率较低。而Hash类型仅需操作相关的字段提高了存储和访问的效率。 综上所述选择String类型存储验证码是因为其简单、高效且生命周期短的特点而选择Hash类型存储用户信息则是为了适应用户信息的结构化特性和提高数据操作的灵活性及效率。
http://www.ho-use.cn/article/10823377.html

相关文章:

  • 在印度做外贸需要什么网站辅助购卡网站怎么做
  • 自主网站怎么投诉网站制作公司
  • 网站制作怎么自己做国家职业资格证书网站
  • 国外网站网站app北京市建设工程安全质量监督总站网站
  • 网站建设上线问题网站做的简单是什么意思
  • 如何制作新型网站程序公司注册代理机构
  • 做pc网站会连带手机版如何制作短视频
  • html5 网站开发定制简洁大气企业网站模板
  • 哈密地网站建设网站建设征求意见通知
  • 新网站seo技术湖北省建筑信息平台
  • 遂宁移动端网站建设合肥百度搜索排名优化
  • 佛山网站建设公司分享微信营销的五个技巧韩国设计欣赏网站
  • 做标准件网站推广公司产品
  • 蓝田微网站建设雄安网站建设制作
  • 有本地服务器怎么做网站网页设计如何制作背景
  • aspcms网站使用教程福田蒙派克4s店
  • 长沙市做网站四川建设厅电话网站
  • 厦门做网站优化价格学校网站 aspx源码
  • 高端网站建设找哪个公司新网站做seo优化步骤
  • 福州建设厅官方网站网络营销案例分析实验报告
  • 互联网舆情报告福州网站seo
  • 荔浦网站开发微信公众号开通流程
  • 徐州网站建设xlecwordpress 导出表单
  • 服务器网站绑定域名网站建设淮南本地网
  • 财务管理系统东营做网站优化公司
  • 网站后台更新的内容出不来wordpress清理缓存
  • 黄石网站制作公司网站建设业务流程图
  • 城乡建设学校官方网站wordpress采集英文
  • 南阳网站备案网络推广网站河南
  • 建站公司 万维科技适合夫妻二人观看的电视剧