关注 “弋凡”(YiFan)微信公众号吧 记录简单笔记 做你的最爱
SpringBoot 整合 Redis 看之前文章

Token 是什么?

token 专业术语为 令牌,更通俗来说就相当于暗号,一般用于身份验证的时候,用token更加的安全,

Token 怎么用?

一般通过ajax发送请求,服务器接收请求去验证用户名和密码,然后返回给客户端一串字符串(token),客户端接收这个token把它存在Cookie 或者Local Storage中
客户端每次请求资源的时候需要携带这个token,服务器去接收这个token然后去验证,成功则返回请求需要的数据

Token 存在 Redis

1,导入依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><version>2.2.6.RELEASE</version>
</dependency>

2,编写 application.properties

# redis 配置
spring.redis.host=127.0.0.1
spring.redis.port=6379server.port=999
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=root
spring.thymeleaf.cache = false
# 实体类的包扫描--- 这里使用了 MybatisPlus
mybatis-plus.type-aliases-package =com.yifan.pojo

3,添加 RedisConfig 以及

封装好的 RedisUtil(之前文章有叙述)

4,编写Controller

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.yifan.pao.Result;
import com.yifan.pojo.User;
import com.yifan.service.UserService;
import com.yifan.util.RedisUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;import javax.servlet.http.HttpServletRequest;
import java.util.UUID;@Controller
public class UserController {@Autowiredprivate UserService userService;@Autowiredprivate RedisUtil redisUtil;@GetMapping("index")public String index(){return "index";}@GetMapping({"/","/login"})public String login(){return "login";}@GetMapping("getInfoToken")@ResponseBodypublic String getinfo(HttpServletRequest request){String token = request.getHeader("token");System.err.println("token ---> "+token);long expire = redisUtil.getExpire(token);System.err.println("expire ---> "+redisUtil.getExpire(token));if(expire > 0L){return "ok";}else {return "error";}}@PostMapping("toindex")@ResponseBodypublic Result index(@RequestParam String name , @RequestParam String password){LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();wrapper.eq(User::getName,name).eq(User::getPassword,password);User one = userService.getOne(wrapper);if(one != null ){String token = UUID.randomUUID()+"";redisUtil.set(token,one,30000L);return new Result(one ,token);} else {return null ;}}
}

5,这里的 Result是封装的返回结果类

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@AllArgsConstructor
@NoArgsConstructor
public class Result<T> {private T object;private String data;
}

6,前端页面 一个简单的登录页面

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>登录页面</title>
</head>
<body>
<h4>登录</h4>
<p> <span>name:</span> <input type="text" id="name"></p>
<p> <span>password:</span> <input type="text" id="password"></p>
<p><input type="button" value="login" class="login"></p>
<p><input type="button" value="token login" class="tokenlogin"></p>
</body>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<script>$(function () {$(".tokenlogin").click(function () {$.ajax({type: "get",url: "getInfoToken",headers:{"token":localStorage.token},success: function (res) {console.log("-->res "+res);if(res == "ok"){// 跳转 controller 中的 index 请求window.location.href = "index";}}})});$(".login").click(function () {$.ajax({type: "post",url: "toindex",data: {name:$("#name").val(), password:$("#password").val()},dataType: "json",success: function (res) {// 本地存储这个tokenlocalStorage.token=res.data;if(res !=null){window.location.href = "index";}}})})})
</script>
</html>

7,登录成功页面

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><h3>登录成功了</h3>
</body></html>

8,效果


end —

快来关注“弋凡”微信公众号吧

Token令牌 Redis 案例相关推荐

  1. java令牌验证使用token和redis实现思路

    一个标准项目中,会有拦截器!既然有拦截器,就有它放行规则.这里说一下,放行的规则使用到uuid生成token,然后把token,存放在redis中.前端访问时,带上token请求头.响应回来,把tok ...

  2. 【接口幂等性】使用token,Redis保证接口幂等性

    使用token保证接口幂等性 接口幂等性就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用. 举个最简单的例子,那就是支付,用户购买商品后支付,支付扣款成功, ...

  3. AOP+自定义注解token令牌和参数防重复提交实战

    目录 一.哪些因素会引起重复提交? 二.重复提交会带来哪些问题? 三.订单的防重复提交你能想到几种方案? 四.自定义注解方式 4.1Java核心知识-自定义注解(先了解下什么是自定义注解) 4.1.1 ...

  4. node连接数据库;webpack;token令牌的实现;CommonJs规范;websocket

    node连接数据库 安装mysql 插件:npm i mysql //1.引入 const mysql =require("mysql"); //2.创建连接对象 //使用crea ...

  5. App接口之Token令牌实现

    <App接口之Token令牌实现> 转载请注明来自 傻小孩b_移动开发(http://www.jianshu.com/users/d388bcf9c4d3)喜欢的可以关注我,不定期总结文章 ...

  6. webapi鉴权使用token令牌

    一为什么使用Token验证: 在app开放接口api的设计中,避免不了的就是安全性问题,因为大多数接口涉及到用户的个人信息以及一些敏感的数据,所以对这些接口需要进行身份的认 证,那么这就需要用户提供一 ...

  7. .NET WebAPI 用ActionFilterAttribute实现token令牌验证与对Action的权限控制

    项目背景是一个社区类的APP(求轻吐...),博主主要负责后台业务及接口.以前没玩过webAPI,但是领导要求必须用这个(具体原因鬼知道),只好硬着头皮上了. 最近刚做完权限这一块,分享出来给大家.欢 ...

  8. Redis-学习笔记06【Redis案例】

    Java后端 学习路线 笔记汇总表[黑马程序员] Redis-学习笔记01[Redis环境搭建] Redis-学习笔记02[Redis命令操作] Redis-学习笔记03[Redis持久化] Redi ...

  9. 防重 Token 令牌如何实现幂等性?

    针对客户端连续点击或者调用方的超时重试等情况,例如提交订单,此种操作就可以用 Token 的机制实现防止重复提交. 简单的说就是调用方在调用接口的时候先向后端请求一个全局 ID(Token),请求的时 ...

最新文章

  1. Chapter 5 带颜色的同心圆
  2. 开发中总结的dart相关的技巧
  3. 教你实践ASP.NET Core Authorization(免看文档教程)
  4. 全栈深度学习第4期: 机器学习岗位区别与团队管理
  5. 012.对netmap API的解读
  6. [Unity] ACT 战斗系统学习 8:使用 ScriptableObject 制作角色属性 3
  7. Dart 1(环境安装)
  8. Objective-c方法调用流程
  9. Hyperledger Composer 客户端连接Fabric网络的配置文件解析
  10. Swift开发之简单计算器项目
  11. 高并发解决方案相关面试题
  12. 佳能430二代_简单好用 佳能430EX III-RT闪光灯评测
  13. C++基础入门(第一篇)
  14. 在Flex/Flash项目中使用TLF(Text Layout Framework)的经验分享
  15. 2017年国赛H题_远程幅频特性测试装置训练总结(硬件部分)
  16. ChatGPT 之父传奇:8岁学编程,16岁出柜,37岁颠覆科技圈,网友:“天选 CEO!”...
  17. Unity制作翻页系统
  18. Linux 系统下各种包的安装方法
  19. android禁用模拟器,Android 禁止应用在模拟器上运行
  20. 百度 android 市场占有率,百度数据:11Q1中国Android手机市场研究

热门文章

  1. python字符编码导致dict中key不同
  2. android SQLite数据库用法图文详解(附源码)
  3. 第11章 支撑向量机SVM
  4. 第4章 最基础的分类算法-k近邻算法
  5. 各个大厂的机器学习平台概述
  6. 跨域post请求实现方案小结--转
  7. jquery学习手记(1)
  8. MySQL—【加餐1】高效查询方法
  9. GMIS 2017大会邓力演讲:无监督学习的前沿与SPDG方法的优良性
  10. python模块xlwt怎么用不了_python中使用 xlwt 操作excel的常见方法与问题