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

西安市建设局官方网站网络营销网站平台有哪些

西安市建设局官方网站,网络营销网站平台有哪些,新疆机票网站制作,音乐网站设计总结1.代码逻辑流程图: 这里存储用户信息使用hash结构进行存储。 使用String和json存储不是那么方便。 因为原本使用session的方案会自动帮我们进行校验,这里我们使用redis进行代替有很多东西都需要我们自己去存储。前端会把token存放在请求头中,…

1.代码逻辑流程图:

这里存储用户信息使用hash结构进行存储。 使用String和json存储不是那么方便。

因为原本使用session的方案会自动帮我们进行校验,这里我们使用redis进行代替有很多东西都需要我们自己去存储。前端会把token存放在请求头中,我们每次校验的使用从请求头中获取即可。

2.发送验证码的代码:

public Result sendCode(String phone, HttpSession session) {// 校验手机号if(RegexUtils.isPhoneInvalid(phone)){// 如果不符合,返回错误信息return Result.fail("手机号格式错误");}// 符合生成验证码String code = RandomUtil.randomNumbers(6);// 保存验证码到redis中stringRedisTemplate.opsForValue().set(RedisConstants.LOGIN_CODE_KEY + phone, code,RedisConstants.LOGIN_CODE_TTL,TimeUnit.MINUTES);// 发送验证码log.debug("发送验证码成功,验证码:{}",code);return Result.ok();
}

3.重新实现登录的代码:

public Result login(LoginFormDTO loginForm, HttpSession session) {// 校验手机号和验证码String phone = loginForm.getPhone();if(RegexUtils.isPhoneInvalid(phone)){// 如果不符合,返回错误信息return Result.fail("手机号格式错误");}// 从redis中获取验证码并校验验证码String cacheCode = stringRedisTemplate.opsForValue().get(RedisConstants.LOGIN_CODE_KEY + phone);String code = loginForm.getCode();if(cacheCode == null || !cacheCode.equals(code)){return Result.fail("验证码错误");}// 根据手机号查询用户User user = query().eq("phone",phone).one();if(user == null){user = createUserWithPhone(phone);}//保存用户信息到redis中String token = UUID.randomUUID().toString(true);String tokenKey = RedisConstants.LOGIN_USER_KEY + token;UserDTO userDTO = BeanUtil.copyProperties(user,UserDTO.class);Map<String, Object> userMap = BeanUtil.beanToMap(userDTO,new HashMap<>(), CopyOptions.create().setIgnoreNullValue(true).setFieldValueEditor((fieldName,fieldValue) -> fieldValue.toString()));  // 把User转换成mapstringRedisTemplate.opsForHash().putAll(tokenKey,userMap);//存储用户信息stringRedisTemplate.expire(tokenKey,RedisConstants.LOGIN_USER_TTL,TimeUnit.MINUTES); // 设置有效期return Result.ok(token);
}

4.重新实现登录校验的代码逻辑:

这里就是重新实现拦截器的代码

public class RefreshTokenInterceptor implements HandlerInterceptor {private StringRedisTemplate stringRedisTemplate;public RefreshTokenInterceptor(StringRedisTemplate stringRedisTemplate) {this.stringRedisTemplate = stringRedisTemplate;}public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 1.获取请求头中的tokenString token = request.getHeader("authorization");if (StrUtil.isBlank(token)) {return true;}// 2.基于TOKEN获取redis中的用户String key  = LOGIN_USER_KEY + token;Map<Object, Object> userMap = stringRedisTemplate.opsForHash().entries(key);// 3.判断用户是否存在if (userMap.isEmpty()) {return true;}// 5.将查询到的hash数据转为UserDTOUserDTO userDTO = BeanUtil.fillBeanWithMap(userMap, new UserDTO(), false);// 6.存在,保存用户信息到 ThreadLocalUserHolder.saveUser(userDTO);// 7.刷新token有效期stringRedisTemplate.expire(key, LOGIN_USER_TTL, TimeUnit.MINUTES);// 8.放行return true;}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {// 移除用户UserHolder.removeUser();}
}

这里因为我们设置的token有过期删除时间,所以我们每次操作经过拦截器的时候,都需要刷新过期时间。然后因为有的接口因没有使用拦截器但是我们也需要刷新过期时间,所以建议把更新过期时间和拦截未登录用户写成两个拦截器。但是这里的代码是写在一起的,可以自己改一下。

http://www.dtcms.com/wzjs/270562.html

相关文章:

  • 长沙市住房和城乡建设局网站芭蕉视频app无限次数
  • 做网站源码流程营销策划的概念
  • 南京网站建设包括哪些上海网站seo外包
  • 去什么网站找做电影的素材seo职业
  • 创建一个互联网媒体公司seo面试常见问题及答案
  • 网站开发攻略最新足球消息
  • 做网站用香港哪个机房四年级小新闻50字左右
  • 做 网络网站网站制作的基本流程是什么
  • 石排仿做网站百度搜索平台
  • 做卡盟网站教程关键词有哪些关联词
  • 一个门户网站怎么做海外建站
  • vb语言做的网站深圳优化公司找高粱seo服务
  • 汉中网站建设你就知道首页
  • 成都建设厅网站网站优化推广软件
  • 西安哪里做网站网络整合营销
  • 网站建设需要哪些硬件如何让百度收录自己信息
  • 网站不在首页显示出来seo优化在哪里学
  • 下载源码的网站百度官方app免费下载
  • 一个做服装品牌的网站博客是哪个软件
  • 想要黑掉一个网站 要怎么做域名注册需要什么条件
  • 网站建设费用 业务宣传费中牟网络推广
  • wordpress最快仿站百度入口的链接
  • 人力资源公司名称大全简单大气天津短视频seo
  • 建设银行支行网站产品市场推广计划书
  • 做网站是html好还是java好百度一下你就知道手机版
  • 本地的丹阳网站建设百度热榜
  • 南昌政府网站建设网络推广公司北京
  • 网站活泼微信营销策略
  • 服务性网站建设方案云南网站建设百度
  • 关于建设网站安全性合同数据分析培训班