欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

oauth2.0 认证服务器异常信息

程序员文章站 2022-04-09 23:45:04
密码错误默认的异常信息如下账号无效的异常这里的无效用户 是我在程序中抛出来异常,默认也不这样, 但是不管怎么, 都不是我们想要的, 我想返回给前端自定义的,比如 有status,code msg 等等,自定义 MyWebResponseExceptionTranslator 实现 WebResponseExceptionTranslatorpackage com.yyc.platform.uaa.config;import com.yyc.platform.common.....

密码错误默认的异常信息如下

oauth2.0 认证服务器异常信息

账号无效的异常

oauth2.0 认证服务器异常信息

这里的无效用户 是我在程序中抛出来异常,默认也不这样, 但是不管怎么, 都不是我们想要的, 我想返回给前端自定义的,比如 有status,code msg 等等,

 

自定义 MyWebResponseExceptionTranslator 实现 WebResponseExceptionTranslator

package com.yyc.platform.uaa.config;

import com.yyc.platform.common.utils.JsonResult;
import com.yyc.platform.uaa.exception.UserNotFountException;
import org.omg.CORBA.DynAnyPackage.Invalid;
import org.springframework.http.ResponseEntity;
import org.springframework.security.authentication.InternalAuthenticationServiceException;
import org.springframework.security.oauth2.common.exceptions.InvalidGrantException;
import org.springframework.security.oauth2.common.exceptions.OAuth2Exception;
import org.springframework.security.oauth2.provider.error.WebResponseExceptionTranslator;

/**
 * @Auther: yangyongcui
 * @Date: 2020/7/15: 15:22
 * @Description:
 */
public class MyWebResponseExceptionTranslator implements WebResponseExceptionTranslator<OAuth2Exception> {
    private static final String INVALID_TOKEN_ERROR_DESCRIPTION = "Token was not recognised";//token 无效
    private static final String INVALID_AUTHORIZATION_CODE = "Invalid authorization code";//授权码无效
    private static final String INVALID_USER = "无效用户";//密码有误
    private static final String BAD_CREDENTIALS = "Bad credentials";//密码有误

    @Override
    public ResponseEntity translate(Exception e) {
        if (e.getMessage().startsWith(INVALID_AUTHORIZATION_CODE)) {//无效授权码
            return ResponseEntity.ok().body(JsonResult.fail(e.getMessage(), "1001"));
        } else if (INVALID_USER.equals(e.getMessage())) {//无效用户
            return ResponseEntity.ok().body(JsonResult.fail(e.getMessage(), "1002"));
        } else if (BAD_CREDENTIALS.equals(e.getMessage())) {
            return ResponseEntity.ok().body(JsonResult.fail("密码错误", "1003"));
        } else if (INVALID_TOKEN_ERROR_DESCRIPTION.equals(e.getMessage())) {
            return ResponseEntity.ok().body(JsonResult.fail("token无效", "1004"));
        } else {
            return ResponseEntity.ok().body(JsonResult.fail(e.getMessage()));
        }
    }
}

 我们可以看到真正有异常的时候,oauth2.0 并没有给我们明确的区分是哪种异常类型,比如密码错误和授权码错误,都是一个异常

我们只能通过返回的描述进行判断,而且无效的token那个异常,我们连异常类型都拿不到

如下.是密码错误和者授权码错误的信息

oauth2.0 认证服务器异常信息

 

oauth2.0 认证服务器异常信息

无效token ,连异常类型都拿不到

oauth2.0 认证服务器异常信息

所以,有的只能根据描述进行处理,如果各位有好的处理方式,可以指导一下,不胜感激

 

有了上面的异常处理类,然后进行配置

oauth2.0 认证服务器异常信息

异常中用到的 JsonResult 类是我自定义的, 可以根据自己需要修改

package com.yyc.platform.common.utils;

import lombok.Data;
import org.apache.commons.lang3.StringUtils;

import java.io.Serializable;

/**
 * @Auther: yangyongcui
 * @Date: 2019/3/2: 14:59
 * @Description:返回前端的统一类
 */
@Data
public class JsonResult<T> implements Serializable {
    private static final long serialVersionUID = -8847260026696169235L;
    /***
     * 默认的操作值
     */
    private static final String SUCCESS_CODE = "0";
    private static final String SUCCESS_MSG = "操作成功";
    private static final String SUCCESS_STATUS = "success";

    private static final String FAIL_CODE = "9999";
    private static final String FAIL_MSG = "操作失败";
    private static final String FAIL_STATUS = "fail";

    /**
     * 操作状态  提示 成功还是失败
     */
    private String status = SUCCESS_STATUS;
    /*
      具体的一些后台返回给前端的消息
     */
    private String msg = SUCCESS_MSG;
    /*
     返回的操作码  可以供前端根据不同的状态码进行判断
     */
    private String code = SUCCESS_CODE;


    private Long count = 0L;
    /*
    数据
     */
    private T data;

    public T getData() {
        return this.data;
    }

    public JsonResult() {
    }

    /**
     * 只是返回成功  可以不带数据
     *
     * @return
     */
    public static <T> JsonResult<T> success() {
        return new JsonResult<>();
    }


    /**
     * 返回前端成功的消息和状态码都自定义
     *
     * @param message
     * @return
     */
    public static JsonResult success(String message, String code) {
        JsonResult success = JsonResult.success();
        success.setMsg(message);
        success.setCode(code);
        return success;
    }

    public static <T> JsonResult<T> success(T data) {
        JsonResult<T> success = JsonResult.success();
        success.setData(data);
        return success;
    }

    /**
     * 操作失败
     *
     * @return
     */
    public static JsonResult fail() {
        return JsonResult.fail(FAIL_MSG);
    }

    /**
     * 操作失败自定义消息
     *
     * @return
     */
    public static JsonResult fail(String message) {
        return JsonResult.fail(message, null);
    }

    /**
     * 操作失败自定义消息和状态码
     *
     * @return
     */
    public static JsonResult fail(String message, String code) {
        JsonResult jsonResult = new JsonResult();
        jsonResult.setStatus(FAIL_STATUS);
        if (StringUtils.isNotBlank(message)) {
            jsonResult.setMsg(message);
        } else {
            jsonResult.setMsg(FAIL_MSG);
        }
        if (StringUtils.isNotBlank(code)) {
            jsonResult.setCode(code);
        } else {
            jsonResult.setCode(FAIL_CODE);
        }
        return jsonResult;
    }


}

效果:

oauth2.0 认证服务器异常信息

 

oauth2.0 认证服务器异常信息

oauth2.0 认证服务器异常信息

 

你如果有好的办法还请指教

 

 

 

 

 

 

本文地址:https://blog.csdn.net/csdnmuyi/article/details/107377824