Java Auth2.0认证服务_oauth2.0 认证服务器异常信息

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

a421c22b7386ab1331cf751af4273841.png

账号无效的异常

44abfa4b50db214aea16abbf19af9636.png

这里的无效用户 是我在程序中抛出来异常,默认也不这样, 但是不管怎么, 都不是我们想要的, 我想返回给前端自定义的,比如 有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那个异常,我们连异常类型都拿不到

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

0433a0fc03cfabfb1703d51ad8254138.png

b5580e8697960cd3d81a5ee25eed9cb6.png

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

b755155ba69df86ad966aa8e8b94e330.png

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

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

16512e5d5edf1f10208128aedfc50f0e.png

异常中用到的 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;

}

}

效果:

310b901d513acf9cd2d0b9d64e5a4ca3.png

eea15ff98fff5ea5f8c6c1c69c5324d2.png

500db515591b21b4e7baa53b52a4fe34.png

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

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

希望与广大网友互动??

点此进行留言吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值