PHP之JWT接口鉴权(二) 自定义错误异常

1.定义错误码,在App\Common\Err下创建ApiErrDesc.php
<?php
namespace App\Common\Err;

class ApiErrDesc{
    const SUCCESS = [0,'Success'];
    const UNKNOWN_ERR = [1,'未知错误'];
    const ERR_URL = [2,'访问的接口不存在'];
    const ERR_PARAMS = [100,'参数错误'];
    const ERR_PASSWORD = [1001,'密码错误'];
    const ERR_TOKEN = [1002,'登录过期'];
}
2.创建错误异常类,在App\Exceptions下创建ApiException.php(下面需要在中间件的Handle中调用)
<?php
namespace App\Exceptions;

use Throwable;
//异常类
class ApiException extends \RuntimeException{
    public function __construct(array $apiErrConst, Throwable $previous = null)
    {
        $code = $apiErrConst[0];
        $message = $apiErrConst[1];
        parent::__construct($message, $code, $previous);
    }
}
3.在App\Exceptions\Hander.php中的render方法写错误异常逻辑(核心)
public function render($request, Exception $exception)
    {
        //return parent::render($request, $exception);
        if($exception instanceof ApiException){  //如果$exception实现了ApiException的实例
            $code=$exception->getCode();
            $message=$exception->getMessage();
        }else{
            $code=$exception->getCode();
            if(!$code || $code<0){
                $code=ApiErrDesc::UNKNOWN_ERR[0]; //未知错误
            }
            $message=$exception->getMessage() ? $exception->getMessage() : ApiErrDesc::UNKNOWN_ERR[1]; //未知错误
        }
        return $this->jsonData($code,$message);
    }
    4.然后再App\Http\Middleware\JwtAuthMiddleware.php的handle方法编写抛出异常
    public function handle($request, Closure $next)
    {
        $token=$request->input('token');
        if(!empty($token)){
            $jwtauth=JwtAuth::getInstance();
            $jwtauth->setToken($token);

            if($jwtauth->validate() && $jwtauth->verify()){
                return $next($request);
            }else{
            	//自定义错误异常
                throw new ApiException(ApiErrDesc::ERR_TOKEN);
            }
        }else{
            //自定义错误异常
            throw new ApiException(ApiErrDesc::ERR_PARAMS);
        }
    }

在这里插入图片描述

基于Spring Boot、OAuth2.0和JWT Token鉴权认证开发的后台接口是一种使用现代化技术实现的身份验证和授权机制。下面是关于这种后台接口的一些说明: 首先,Spring Boot是一个基于Spring框架的快速开发框架,提供了简化的配置和自动化的特性,使开发者能够更快速高效地开发后台接口。 OAuth2.0是一种开放标准的授权协议,它允许用户授权第三方应用访问他们在资源拥有者上存储的信息,而不需要将用户名和密码提供给第三方。 JWT Token(JSON Web Token)是一种用于在网络应用间安全传递声明的一种方式。它被用作身份验证和授权的令牌,通过加密并以JSON格式存储信息,确保信息的完整性和安全性。 基于以上技术,我们可以开发出具有强大安全认证能力的后台接口。首先,用户在访问接口时,需要提供他们的身份证明,这可以是用户名和密码。接口服务器会使用OAuth2.0协议进行身份验证,并颁发JWT Token给用户用户在未来的请求中,可以使用该Token进行身份验证,而无需每次都提供用户名和密码。 接口服务器会对JWT Token进行验证,以确保Token的完整性和有效性。如果Token失效或被伪造,访问将被拒绝。如果验证通过,接口服务器会正常处理用户的请求。 使用Spring Boot和OAuth2.0进行开发,可以方便地设置权限和角色。可以根据用户的角色和权限,限制他们对某些资源的访问。 总之,基于Spring Boot、OAuth2.0和JWT Token鉴权认证开发的后台接口提供了一种安全可靠的身份验证和授权机制,能够有效保护后台接口的安全性,防止非法访问和数据泄露。这种技术组合在开发现代化的网络应用时非常有用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值