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

物流项目第一期(登录业务)

实现分析

 验证码功能

Controller

@ApiOperation(value = "验证码", notes = "验证码")@GetMapping(value = "/captcha", produces = "image/png")public void captcha(@RequestParam(value = "key") String key, HttpServletResponse response) throws IOException {this.authService.createCaptcha(key, response);}

AuthService

	private static final String CAPTCHA_REDIS_PREFIX = "CAPTCHA_";@Overridepublic void createCaptcha(String key, HttpServletResponse response) throws IOException {//1. 生成验证码,指定宽、高、字符个数、干扰线条数LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(115, 42, 0, 10);//1.1 设置生成器为数字计算验证码生成器并且指定参与计算最大数字位数为1,也就是个位数相加lineCaptcha.setGenerator(new MathGenerator(1));//1.2 获取生成的验证码值String code = lineCaptcha.getCode();//2. 将验证码的值写入到redis,有效期为1分钟String redisKey = CAPTCHA_REDIS_PREFIX + key;this.stringRedisTemplate.opsForValue().set(redisKey, code, Duration.ofMinutes(1));//3. 输出到页面,设置页面不缓存response.setHeader(HttpHeaders.PRAGMA, "No-cache");response.setHeader(HttpHeaders.CACHE_CONTROL, "No-cache");response.setDateHeader(HttpHeaders.EXPIRES, 0L);lineCaptcha.write(response.getOutputStream());}

实现登录

AuthService

    /*** 登录** @param login 用户登录信息* @return 登录结果*/@Overridepublic R<LoginDTO> login(LoginParamDTO login) {//1. 校验参数if (ObjectUtil.hasEmpty(login.getCode(), login.getKey())) {return R.error("验证码不能为空");}if (ObjectUtil.hasEmpty(login.getAccount(), login.getPassword())) {return R.error("用户名、密码不能为空");}//2. 校验验证码String redisKey = CAPTCHA_REDIS_PREFIX + login.getKey();String redisValue = this.stringRedisTemplate.opsForValue().get(redisKey);if (ObjectUtil.isEmpty(redisValue)) {return R.error("验证码已过期");}//验证码只能使用一次,所以需要将验证码删除this.stringRedisTemplate.delete(redisKey);boolean verify = new MathGenerator().verify(redisValue, login.getCode());if (!verify) {return R.error("验证码不正确");}//3. 校验用户名密码,校验通过生成tokenreturn this.login(login.getAccount(), login.getPassword());}/*** 登录获取token** @param account  账号* @param password 密码* @return 登录信息*/public R<LoginDTO> login(String account, String password) {//调用权限管家接口,传递用户名和密码Result<LoginDTO> result = this.authTemplate.opsForLogin().token(account, password);if (ObjectUtil.equal(result.getCode(), 0)) {//登录成功return R.success(result.getData());}//登录失败return R.error(result.getMsg());}

Controller

    /*** 管理端登录** @param login 登录信息* @return 用户信息*/@PostMapping(value = "/login")@ApiOperation(value = "登录", notes = "登录")public R<LoginDTO> login(@RequestBody LoginParamDTO login) {return this.authService.login(login);}

相关文章:

  • 深入理解 Vue2 与 Vue3 响应式系统:丢失场景、原因及解决方案
  • 【成品设计】基于STM32和LoRa远程通信控制系列项目
  • [IMX] 04.定时器 - Timer
  • 三维云展展示效果升级​
  • day 30
  • 开发指南116-font-size: 0的使用
  • Linux-进程信号
  • 存储系统03——数据缓冲evBuffer
  • ebpf程序入门编写
  • frida 配置
  • OCframework编译Swift
  • 【C++]string模拟实现
  • C++编程this指针练习
  • 【科研项目】大三保研人科研经历提升
  • Python元组全面解析:从入门到精通
  • 【基础】Windows开发设置入门8:Windows 子系统 (WSL)操作入门
  • 深入解析Java四大引用类型:从强引用到虚引用的内存管理艺术
  • 软件设计师E-R模型考点分析——求三连
  • STM32实战指南:DHT11温湿度传感器驱动开发与避坑指南
  • 关于ECMAScript的相关知识点!
  • 上海普陀:探索1岁以下托育服务的保育内容、人员配备等关键要素
  • 台陆委会将欧阳娜娜等20多名艺人列入重要查核对象,国台办回应
  • 海南省检察院专委李思阳被带走,去年曾遭人举报违规插手案件
  • 吴双评《发展法学》|穷国致富的钥匙:制度,还是产业活动?
  • 广东进入“倒水模式”,珠江防总、珠江委已启动Ⅳ级应急响应
  • 中国旅游日|上天当个“显眼包”!低空经济的“飞”凡魅力