1.composer安装 jwt

composer require lcobucci/jwt 3.3

2.在extend/tools/jwt目录下创建Token.php文件

注意 extend目录下tools/jwt目录没有需要自己创建

<?phpnamespace tools\jwt;use Lcobucci\JWT\Builder;
use Lcobucci\JWT\Parser;
use Lcobucci\JWT\Signer\Hmac\Sha256;
use Lcobucci\JWT\ValidationData;class Token
{   // createToken为生成token令牌的方法public static function createToken($uid = null){$signer = new Sha256();//加密规则$time = time();//当前时间$token = (new Builder())->issuedBy('teacher')//签发人->canOnlyBeUsedBy('student')//接收人->identifiedBy('MarsLei', true) //标题id->issuedAt($time)//发出令牌的时间->canOnlyBeUsedAfter($time) //生效时间(即时生效)->expiresAt($time + 3600) //过期时间->with('uid', $uid) //用户id->sign($signer, 'my') //签名->getToken(); //得到tokenreturn (string)$token;}//verifyToken 为验证token令牌的方法public static function verifyToken($token=null){//检测是否接收到了tokenif(empty($token)){return 0;}//转化为可以验证的token$token = (new Parser())->parse((string) $token);//验证基本设置$data = new ValidationData();$data->setIssuer('teacher');$data->setAudience('student');$data->setId('MarsLei');if(!$token->validate($data)){return 0;}//验证签名$signer = new Sha256();if(!$token->verify($signer, 'my')){return 0;}//验证通过,返回用户idreturn $token->getClaim('uid');}}

3.生成token 验证token的方法

一般我们在登录成功后将用户数据的id生成token令牌


//生成token
$token = Token::createToken($userInfo['id']); //生成token
//验证Token
$res = Token::verifyToken($token);
if (!$res) {//验证失败$this->error('token令牌失效', 'home/Login/login');}

4.在controller目录下创建Base控制器

让你需要验证的控制器继承Base控制器

<?phpnamespace app\home\controller;use think\Cache;
use think\Controller;
use think\Request;
use think\Session;
use tools\jwt\Token;class Base extends Controller
{    //将你控制器中不需要验证的方法写在此数组中即可不用token验证protected $url = ['book/book',"book/type","book/detail"];function __construct(Request $request = null){$ip = request()->ip();//获取ip地址$num = Cache::store('redis')->get($ip.'times');//获取请求次数$lastTime =Cache::store('redis')->get($ip);//获取上次请求的时间if(time()-$lastTime<60){
//            echo $num;if ($num >=5)//每分钟请求大于等于5次的时候限制请求{$res = ['code' => 511,'msg' => '操作过于频繁,'];echo json($res)->send();die;//返回信息阻止继续请求}}if($num>=5){Cache::store('redis')->handler()->del($ip.'times');//等待时间过期后清除单位时间请求次数}parent::__construct($request);$route = strtolower(request()->controller().'/'.request()->action());//获取请求控制器和方法if(!in_array($route,$this->url))//判断请求的控制器方法是否在数组中,没有则需要登录验证{$token = request()->param('token');if (empty($token)){$this->fail('token不存在', 403);die;//fail()是封装好的方法}//令牌验证$res = Token::verifyToken($token);if (!$res){$this->fail('token无效',500);die;}}Cache::store('redis')->set($ip,time());//将同一ip地址的第一次请求时间存入缓存Cache::store('redis')->inc($ip.'times');//请求次数存入Redis做自增}protected function response($code=200, $msg='success', $data=[]){$res = ['code' => $code,'msg' => $msg,'data' => $data];//原生php写法
//        echo json_encode($res, JSON_UNESCAPED_UNICODE);die;//框架写法json($res)->send();}/*** 成功的响应* @param array $data 返回数据* @param int $code 错误码* @param string $msg 错误信息*/protected function ok($data=[], $code=200, $msg='success'){$this->response($code, $msg, $data);}/*** 失败的响应* @param $msg 错误信息* @param int $code 错误码* @param array $data 返回数据*/protected function fail($msg, $code=500, $data=[]){$this->response($code, $msg, $data);}}

tp5 JWT生成token验证接口安全、防止高频请求相关推荐

  1. 接口使用jwt返回token_Java中使用JWT生成Token进行接口鉴权实现方法

    先介绍下利用JWT进行鉴权的思路: 1.用户发起登录请求. 2.服务端创建一个加密后的JWT信息,作为Token返回. 3.在后续请求中JWT信息作为请求头,发给服务端. 4.服务端拿到JWT之后进行 ...

  2. java 接口鉴权_安全|Java中使用JWT生成Token进行接口鉴权实现

    先介绍下利用JWT进行鉴权的思路: 1.用户发起登录请求. 2.服务端创建一个加密后的JWT信息,作为Token返回. 3.在后续请求中JWT信息作为请求头,发给服务端. 4.服务端拿到JWT之后进行 ...

  3. java 接口 token_Java中使用JWT生成Token进行接口鉴权实现方法

    先介绍下利用JWT进行鉴权的思路: 1.用户发起登录请求. 2.服务端创建一个加密后的JWT信息,作为Token返回. 3.在后续请求中JWT信息作为请求头,发给服务端. 4.服务端拿到JWT之后进行 ...

  4. JWT生成token和验证的简单实现

    给客户提供数据接口时,要求使用jwt生成token实现token认证 首先引入依赖: <!-- JWT --> <dependency><groupId>com.a ...

  5. java token生成和验证_SpringBoot集成JWT生成token及校验方法过程解析

    GitHub源码地址:https://github.com/zeng-xian-guo/springboot_jwt_token.git 封装JTW生成token和校验方法 public class ...

  6. jwt token 附加用户信息_SpringBoot+JWT实现token验证并将用户信息存储到@注解内

    springboot集成jwt实现token验证 1.引入jwt依赖 io.jsonwebtoken jjwt 0.9.0 com.auth0 java-jwt 3.9.0 2.自定义两个注解 /** ...

  7. VUE+SpringBoot+JWT实现token验证,SSO单点登录

    Session的产生: 在说session是啥之前,我们先来说说为什么会出现session会话,它出现的机理是什么?我们知道,我们用浏览器打开一个网页,用到的是HTTP协议,htpp协议是无状态的,什 ...

  8. Spring Boot+Spring Security+JWT 实现token验证

    Spring Boot+Spring Security+JWT 实现token验证 什么是JWT? JWT的工作流程 JWT的主要应用场景 JWT的结构 SpringBoot+Spring Secur ...

  9. 【SpringBoot】44、SpringBoot中整合JWT实现Token验证(整合篇)

    什么是JWT? Json web token (JWT),是为了在网络应用环境间传递声明而执行的一种基于 JSON 的开放标准((RFC 7519),该 token 被设计为紧凑且安全的,特别适用于分 ...

最新文章

  1. 剑指 offer set 22 数组中的逆序数
  2. python pandas DataFrame 修改数据
  3. Python基础(14)_python模块之configparser模块、suprocess
  4. hdu 5340(manacher+枚举)
  5. silverlight导出excel
  6. 10+知识图谱开放下载,让你的学习效率提升5倍! | “右脑”开发套餐
  7. Visio——软件工程实验贰——面向对象软件设计方法
  8. 带你了解两种线性规划的方法:稀疏矩阵存储和预处理
  9. menu什么意思中文意思_pipeline什么意思
  10. Looper,Handler, MessageQueue
  11. wps表格数字和名字分开_WPS表格怎么把一串数字用句号分?
  12. python属性管理(1):基础
  13. 掌握Thinkphp3.2.0----标签库
  14. 统计学基础12-秩和检验
  15. 计算机c盘红色,win7系统c盘空间不足变红了如何解决_windows7的C盘变成红色怎么办...
  16. android 自定义接口,Android中定义接口的用法
  17. 雅西高速交警列16处危险路段 司机需小心行驶
  18. 博客中可用的Emoji表情符号集,拿走不谢❤️❣️
  19. 2020、2021、2022数控机床数据采集方案汇总
  20. H.264码流分析及编解码调试

热门文章

  1. 信能阳光——打造国内体育照明领域的旗舰品牌
  2. 市场调研报告-钨铜合金材料市场现状及未来发展趋势
  3. P1919 FFT加速高精度乘法
  4. 洛谷 P1919 【模板】A*B Problem升级版 【快速傅里叶变换 FFT】
  5. 基于MATLAB/Simulink搭建的纯电动汽车整车仿真模型,包括驾驶员模块,电机模块,制动能量回收模块
  6. 彻底搞懂AQS-重点方法精讲 [并发劝退- 哭唧唧]
  7. 黑马程序员就业班第二天的总结以及自己的看法
  8. android毛玻璃壁纸效果,【手机教程大赛】制作 毛玻璃效果 壁纸
  9. LL(1)分析法(C++实现)
  10. android自动夜间模式,Android实现日夜间模式的深入理解