dromara / Sa-Token

一个轻量级 Java 权限认证框架,让鉴权变得简单、优雅!—— 登录认证、权限认证、分布式Session会话、微服务网关鉴权、单点登录、OAuth2.0
https://sa-token.cc
Apache License 2.0
16.28k stars 2.58k forks source link

网关统一鉴权能否获取异常类型, 然后自定义抛出呢? #271

Closed TOP-LH closed 2 years ago

TOP-LH commented 2 years ago

对以下问题有疑问:

网关统一鉴权能否获取异常类型, 然后自定义抛出呢? 因为我们有统一返回类型, 不能破坏结构性

gh-nom commented 2 years ago

你定义一个全局异常处理器拦截 NotLoginException 或者 SaReactorFilter 里面 有个 setError 方法 你可以看一下 sa-token-demo-webflux

TOP-LH commented 2 years ago

你定义一个全局异常处理器拦截 NotLoginException 或者 SaReactorFilter 里面 有个 setError 方法 你可以看一下 sa-token-demo-webflux

他这个e是Throwable类型, 我可以判读这个类型吗

TOP-LH commented 2 years ago

你定义一个全局异常处理器拦截 NotLoginException 或者 SaReactorFilter 里面 有个 setError 方法 你可以看一下 sa-token-demo-webflux

springcloud gateway没办法写全局异常吧

gh-nom commented 2 years ago

你定义一个全局异常处理器拦截 NotLoginException 或者 SaReactorFilter 里面 有个 setError 方法 你可以看一下 sa-token-demo-webflux

他这个e是Throwable类型, 我可以判读这个类型吗

你能点进这个方法里面去看看嘛

public SaReactorFilter setError(SaFilterErrorStrategy error) {
        this.error = error;
        return this;
    }
gh-nom commented 2 years ago

你可以参考以下内容:

setError(e -> {
    if (e instanceof NotLoginException) {
        return new Gson().toJson(new Result(Boolean.FALSE, ResultCode.NOT_LOGIN, e.getMessage()));
    }
    return new Gson().toJson(new Result(Boolean.FALSE, ResultCode.ERROR, e.getMessage()));
})
TOP-LH commented 2 years ago

你可以参考以下内容:

setError(e -> {
    if (e instanceof NotLoginException) {
        return new Gson().toJson(new Result(Boolean.FALSE, ResultCode.NOT_LOGIN, e.getMessage()));
    }
    return new Gson().toJson(new Result(Boolean.FALSE, ResultCode.ERROR, e.getMessage()));
})

牛呀,我试试,谢谢提醒