【Sa-Token】7、Sa-Token抛出的异常统一处理

简介: 在 Sa-Token 的登录,授权,验证过程中,会抛出很多的异常,我们不能将这些异常信息直接返回给用户,因为用户是看不懂这些异常信息的,我们就需要对这些异常信息进行处理,处理之后再返回展示给前端用户

在 Sa-Token 的登录,授权,验证过程中,会抛出很多的异常,我们不能将这些异常信息直接返回给用户,因为用户是看不懂这些异常信息的,我们就需要对这些异常信息进行处理,处理之后再返回展示给前端用户

1、统一异常处理

package com.asurplus.common.satoken;
import cn.dev33.satoken.exception.*;
import com.asurplus.common.utils.RES;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
/**
 * 全局异常处理
 *
 * @Author Lizhou
 */
@RestControllerAdvice
public class SaTokenExceptionHandler {
    @ExceptionHandler(NotLoginException.class)
    public RES handlerNotLoginException(NotLoginException nle) {
        // 不同异常返回不同状态码
        String message = "";
        if (nle.getType().equals(NotLoginException.NOT_TOKEN)) {
            message = "未提供Token";
        } else if (nle.getType().equals(NotLoginException.INVALID_TOKEN)) {
            message = "未提供有效的Token";
        } else if (nle.getType().equals(NotLoginException.TOKEN_TIMEOUT)) {
            message = "登录信息已过期,请重新登录";
        } else if (nle.getType().equals(NotLoginException.BE_REPLACED)) {
            message = "您的账户已在另一台设备上登录,如非本人操作,请立即修改密码";
        } else if (nle.getType().equals(NotLoginException.KICK_OUT)) {
            message = "已被系统强制下线";
        } else {
            message = "当前会话未登录";
        }
        // 返回给前端
        return RES.no(401, message);
    }
    @ExceptionHandler
    public RES handlerNotRoleException(NotRoleException e) {
        return RES.no(403, "无此角色:" + e.getRole());
    }
    @ExceptionHandler
    public RES handlerNotPermissionException(NotPermissionException e) {
        return RES.no(403, "无此权限:" + e.getCode());
    }
    @ExceptionHandler
    public RES handlerDisableLoginException(DisableLoginException e) {
        return RES.no(401, "账户被封禁:" + e.getDisableTime() + "秒后解封");
    }
    @ExceptionHandler
    public RES handlerNotSafeException(NotSafeException e) {
        return RES.no(401, "二级认证异常:" + e.getMessage());
    }
}

Sa-Token 会抛出的异常大概就有这些,你可以根据你实际的业务需求,对不用的异常场景返回不同的业务信息,方便前端开发人员做不同的处理

相关文章
sa-token实现网关调用认证服务统一鉴权
sa-token实现网关调用认证服务统一鉴权
1023 0
|
缓存 NoSQL 中间件
【Sa-Token】6、Sa-Token集成Redis
Sa-Token 支持 Redis、Memcached 等专业的缓存中间件中, 做到重启数据不丢失,而且保证分布式环境下多节点的会话一致性
3185 0
|
消息中间件 存储 数据库
RabbitMQ之MQ的可靠性
RabbitMQ之MQ的可靠性
476 0
|
移动开发 小程序
(简单详细)uniapp实现自定义海报内容并生成海报二维码图片(可拖拽,可调节大小)
(简单详细)uniapp实现自定义海报内容并生成海报二维码图片(可拖拽,可调节大小)
1656 0
(简单详细)uniapp实现自定义海报内容并生成海报二维码图片(可拖拽,可调节大小)
|
SQL 监控 druid
p6spy【SpringBoot集成】使用p6spy-spring-boot-starter集成p6spy监控数据库(配置方法举例)
p6spy【SpringBoot集成】使用p6spy-spring-boot-starter集成p6spy监控数据库(配置方法举例)
3868 0
|
机器学习/深度学习 缓存 Java
javax异常: javax.imageio.IIOException: Can't create output stream解决方法
javax异常: javax.imageio.IIOException: Can't create output stream解决方法
|
NoSQL 前端开发 Java
Sa-Token实现分布式登录鉴权(Redis集成 前后端分离)
Sa-Token实现分布式登录鉴权(Redis集成 前后端分离)
Sa-Token实现分布式登录鉴权(Redis集成 前后端分离)
|
缓存 NoSQL Java
一个轻量级 Java 权限认证框架——Sa-Token
Sa-Token 是一个轻量级 Java 权限认证框架,主要解决:登录认证、权限认证、单点登录、OAuth2.0、分布式Session会话、微服务网关鉴权 等一系列权限相关问题。
|
存储 Prometheus 监控
Prometheus+Grafana普罗米修斯搭建+监控MySQL
​ `Prometheus` 是 `Cloud Native Computing Foundation` 的一个监控系统项目, 集采集、监控、报警等特点于一体。 ​ `Prometheus`主要受启发于`Google`的`Brogmon`监控系统, 从`2012`年开始由前`Google`工程师在`Soundcloud`以开源软件的形式进行研发,`2017`年底发布了基于全新存储层的`2.0`版本,当前最新版本是`2.44.0`版本。
2081 0