欢迎大家加入我的github项目,一起学习,一起发展
---> 全栈工程师进阶学习站
---> 我的前端学习笔记
--->行业内最新最群的报告,工作日每日更新
SpringBoot集成Redis实现Token
项目地址
https://github.com/xunyegege/Backend_development/tree/master/dubbo_ji
灵魂画手上线
⭐️基于SessionID的Token
(1).登录功能
Service层代码
//登录验证 @Override public Users find(String name, String password) { //从mybatis中获取用户信息(数据库表字段设置为not null) Users user = userMapper.findAllByName(name); //匹配验证 if (null !=user){ if (password.equals(user.getPassword())){ return user; } } //验证失败 return null; }
Controller层代码
@ApiOperation(value = "登录") @GetMapping(value = "/login") public String login(@ApiParam(value = "账户名", required = true) @RequestParam(value = "name") String name, @ApiParam(value = "密码", required = true) @RequestParam(value = "password") String password, HttpServletRequest request) { //设置redis最终set的状态 boolean result = false; //获取session String token = request.getSession().getId(); //调用service层验证方法 Users users = userService.find(name, password); //对service层返回的数据进行空值检验 if (null != users) { //如果不是空值,则将该数据用fastjson转换成字符串 String jsonString = JSONObject.toJSONString(users); //将token作为key,jsonString作为value存入redis//并返回boolean类型 result = redisUtils.set(token, jsonString); } //如果存redis返回的是true,则将token传给前端,以表明登陆成功 if (result) { return token; } //登录失败,返回空 return null; }
(2)刷新校验功能
Controller层代码(只在该层调用redis实现)
@ApiOperation(value = "校验") @GetMapping(value = "/check") public String check(@ApiParam(value = "token", required = true) @RequestParam(value = "token") String token) { //通过前端传来的token作为key去redis中拿取数据 String value = (String) redisUtils.get(token); //如果有数据,则返回该数据 if (null != value) { return value; } //没数据,则返回空 return null; }
(3)退出登录功能
Controller层代码
只要在redis中把该用户的sessionID删掉就行了
@ApiOperation(value = " 退出登录") @GetMapping(value = "/exit") public boolean exit(@ApiParam(value = "退出登录", required = true) @RequestParam(value = "token") String token) { //从redis中删除该token redisUtils.del(token); return true; }
(4)注册功能
业务逻辑
1️⃣获取用户名,密码(手机号,邮箱等)
2️⃣从redis中检测用户名是否重复(前端做好密码规范性检测)
3️⃣调用service层接口实现存入数据库操作
4️⃣往redis中存入该用户的注册信息,为下一次用户名重复性检测做好准备
5️⃣返回前端注册成功与否的信息
Controller层代码
@ApiOperation("注册") @PostMapping(value = "/register") public String register(@Valid UserVo userVo) { //redis命名空间 String nameSpace = "USER_REGISTER_NAME:"; Object object = redisUtils.get(nameSpace + userVo.getName()); //用户名不重复,存入数据库 if (null == object) { //Vo对象转换成Dto对象 Users users = new Users(); users.setName(userVo.getName()); users.setPassword(userVo.getPassword()); users.setbTime(new Date()); try { //调用service层插库操作 userService.register(users); //存入redis redisUtils.set(nameSpace + userVo.getName(), 1); return "success"; } catch (Exception e) { e.printStackTrace(); } } else { return "用户名已被注册"; } return "注册失败"; }
(5)删除用户
业务逻辑
1️⃣(这步可加可不加)从redis中检测是否有这个用户
2️⃣从redis中删除该用户的注册信息
3️⃣调用service层的接口,实现从数据库中删除用户的操作
4️⃣返回前端删除成功与否的信息
controller层代码
@ApiOperation(value = "删除用户") @PostMapping(value = "/delUser") public String delUser(@RequestParam(value = "name") String name) { //首先是从redis中判断是否有该用户 Object obj = redisUtils.get(nameSpace + name); if (obj == null) { return "没有该用户"; } else { try { //然后从redis中删除该用户 redisUtils.del(nameSpace + name); //最后从mybatis中删除用户 boolean b = userService.deleteUser(name); if (b == true) { return "删除成功"; } } catch (Exception e) { e.printStackTrace(); } } return "删除失败"; }
闲聊时刻
10年短信公司,互联网100强企业!主营业务:短信(国内和国际)App H5一键免密登录,防薅羊毛接口,图片OCR,空号检测,活跃号检测,人证核验,活体检测,高防ddos攻击等等200多个企业服务接口!需要的联系他13592366783 官方链接:https://zz.253.com/v5.html#/register?uid=1953
自己公司需求 偶然间 用了一家第三方接口供应商,产品应有尽有,很齐全,对接文档非常详细,彼此都很节约时间,主要非常稳定,包括服务方面很给力,有兴趣的博友,可以联系他,算是对合作伙伴的支持了