iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Spring Cloud OAuth2怎么实现自定义token返回格式
  • 906
分享到

Spring Cloud OAuth2怎么实现自定义token返回格式

2023-07-02 13:07:28 906人浏览 安东尼
摘要

这篇“spring Cloud OAuth2怎么实现自定义token返回格式”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我

这篇“spring Cloud OAuth2怎么实现自定义token返回格式”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Spring Cloud OAuth2怎么实现自定义token返回格式”文章吧。

问题描述

Spring Security OAuth的token返回格式都是默认的,但是往往这个格式是不适配系统,/oauth/token返回的格式如下:

{    "access_token": token    "token_type": "bearer",    "refresh_token": xxxx    "expires_in": xxx,    "scope": "xxx",    "jti": xxxx    ....................}

然而此时系统中的统一返回格式为:

{    "code":xxx    "data":xxx    "msg":xxx}

那么如何去对默认的格式进行修改呢?

解决方案

其实解决方案还是很多的,据陈某了解有如下两种解决方案:

  • 使用aop的方式对/oauth/token这个接口的结果拦截修改

  • 重定义接口覆盖默认的

第一种方案呢可以实现,但是对于陈某来说不够优雅,实现比较简单,不显逼格

于是陈某今天介绍第二种方案,一种比较优雅的方式;想要理解第二种方式必须对Spring Security的底层源码有一些了解。

/oauth/token这个接口定义在哪里呢?通过源码我们知道定义在org.springframework.security.oauth3.provider.endpoint.TokenEndpoint中,如下:

@RequestMapping(value = "/oauth/token", method=RequestMethod.GET)public ResponseEntity<OAuth3AccessToken> getAccessToken(Principal principal, @RequestParamMap<String, String> parameters) throws HttpRequestMethodNotSupportedException {}@RequestMapping(value = "/oauth/token", method=RequestMethod.POST)public ResponseEntity<OAuth3AccessToken> postAccessToken(Principal principal, @RequestParamMap<String, String> parameters) throws HttpRequestMethodNotSupportedException {}

可以看到针对这个接口定义了两个,一个是GET请求、一个是POST请求

TokenEndpoint其实就是一个接口,使用注解@FrameworkEndpoint标注,这个注解和@Controller的作用一样,如下:

@FrameworkEndpointpublic class TokenEndpoint extends AbstractEndpoint {}

那么知道在哪里定义的就好办了,模仿着它这个接口自己重新定义一个覆盖掉不就好了,如下:

@api(value = "OAuth接口")@RestController@RequestMapping("/oauth")@Slf4jpublic class AuthController implements InitializingBean {    //令牌请求的端点    @Autowired    private TokenEndpoint tokenEndpoint;    //自定义异常翻译器,针对用户名、密码异常,授权类型不支持的异常进行处理    private OAuthServerWEBResponseExceptionTranslator translate;        @PostMapping(value = "/token")    public ResultMsg<OAuth3AccessToken> postAccessToken(Principal principal, @RequestParam            Map<String, String> parameters) throws HttpRequestMethodNotSupportedException {        OAuth3AccessToken accessToken = tokenEndpoint.postAccessToken(principal, parameters).getBody();        return ResultMsg.resultSuccess(accessToken);    }}

可以看到接口内部不需要自己重写逻辑,只需要调用TokenEndpoint中的方法

注意:由于对TokenEndpoint中的端点重写了,因此前面定义的对用户名、密码之类的异常捕获的翻译类(OAuthServerWebResponseExceptionTranslator)将会失效,需要在全局异常中进行捕获

上面是/oauth/token的接口,/oauth/check_token这个校验token的接口如需自定义也是可以的,对应的类是org.springframework.security.oauth3.provider.endpoint.CheckTokenEndpoint

重写后代码如下:

@Api(value = "OAuth接口")@RestController@RequestMapping("/oauth")@Slf4jpublic class AuthController implements InitializingBean {    @Autowired    private CheckTokenEndpoint checkTokenEndpoint;    //自定义异常翻译器,针对用户名、密码异常,授权类型不支持的异常进行处理    private OAuthServerWebResponseExceptionTranslator translate;            @PostMapping(value = "/check_token")    public ResultMsg<Map<String,?>> checkToken(@RequestParam("token") String value)  {        Map<String, ?> map = checkTokenEndpoint.checkToken(value);        return ResultMsg.resultSuccess(map);    }

以上就是关于“Spring Cloud OAuth2怎么实现自定义token返回格式”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网精选频道。

--结束END--

本文标题: Spring Cloud OAuth2怎么实现自定义token返回格式

本文链接: https://www.lsjlt.com/news/341924.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Spring Cloud OAuth2实现自定义token返回格式
    目录问题描述解决方案总结最近读者朋友针对Spring Security OAuth2.0 想要陈某补充一些知识,如下: 今天这篇文章就来回答其中一个问题:如何自定义token的返回...
    99+
    2022-11-13
  • Spring Cloud OAuth2怎么实现自定义token返回格式
    这篇“Spring Cloud OAuth2怎么实现自定义token返回格式”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我...
    99+
    2023-07-02
  • Spring Cloud OAuth2中/oauth/token返回的内容格式是什么
    本篇内容介绍了“Spring Cloud OAuth2中/oauth/token返回的内容格式是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有...
    99+
    2023-06-20
  • Spring Cloud gateway自定义错误处理Handler怎么实现
    本文小编为大家详细介绍“Spring Cloud gateway自定义错误处理Handler怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Spring Cloud gateway自定义错误处...
    99+
    2023-07-05
  • laravel中怎么实现随着Resource返回自定义分页信息
    这篇文章主要介绍“laravel中怎么实现随着Resource返回自定义分页信息”,在日常操作中,相信很多人在laravel中怎么实现随着Resource返回自定义分页信息问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作