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

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

oauth2.0 认证服务器异常信息_第1张图片

账号无效的异常

oauth2.0 认证服务器异常信息_第2张图片

这里的无效用户 是我在程序中抛出来异常,默认也不这样, 但是不管怎么, 都不是我们想要的, 我想返回给前端自定义的,比如 有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 {
    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 认证服务器异常信息_第3张图片

 

oauth2.0 认证服务器异常信息_第4张图片

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

oauth2.0 认证服务器异常信息_第5张图片

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

 

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

oauth2.0 认证服务器异常信息_第6张图片

异常中用到的 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 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  JsonResult 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  JsonResult success(T data) {
        JsonResult 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 认证服务器异常信息_第7张图片

 

oauth2.0 认证服务器异常信息_第8张图片

oauth2.0 认证服务器异常信息_第9张图片

 

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

 

 

 

 

 

 

你可能感兴趣的:(oauth2.0 认证服务器异常信息)