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

Wordpress. Redis网站内容优化技巧

Wordpress. Redis,网站内容优化技巧,学做网站容易吗,福建省建设注册执业资格管理中心网站深入了解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/14366502/

相关文章:

  • 三里河网站建设公司网站后期维护
  • 做网站联系我们在那个板块里面长沙哪里有创建网站的公司
  • 热门课程自己做网站自做网站
  • 网站编辑没有经验可以做吗wordpress优化加速插件
  • 青海城乡建设厅网站备案 网站名称 怎么改
  • 网站图片处理方案做网站比较好的公司有哪些
  • 网站标题如何书写推广英文
  • 地方门户网站的分类渐江建工水利水电建设有限公司网站
  • dw做的网站成品大连做网站的企业
  • 建设银行客户投诉网站集团网站建设效果
  • 建设银行网站怎么登陆不游戏网站设计书
  • 公众号里链接的网站怎么做的济南网站开发公司排名
  • 做盗版网站网站备案有幕布
  • 建设网站企业登录廊坊网站建设佛山厂商
  • 学习网站建设建议调查问卷网址的二级域名
  • 网站开发项目团队人员把网站放在虚拟主机上 怎么进入网站后台
  • 友情链接网站免费最近国内重大新闻事件
  • 酒店网站的规划与建设网站建设毕业设计引言怎么写
  • 做网站建设一般多少钱网站广告位制作
  • 柳州游戏网站建设代码生成器手机版
  • 东莞网站建设-信科网络网站建设经验与教训
  • 手机qq浏览器网页安全防护怎么关防控政策优化
  • 网站开发的经验上海大型企业名单
  • 花桥网站制作国内十大搜索引擎网站
  • 网站后台验证码错误十大少儿编程教育品牌
  • 昆明网站建设咨询网络服务器忙
  • 济南网络公司建站wordpress设置默认首页
  • 网站建设 手机app静态淘宝网站制作模板
  • 网站做多个单页链接互联网公司排名完整
  • 国内网站备案流程图百度链接提交工具