当前位置:   article > 正文

BUG写累了分享下笔记-关于spring-security-oauth2传递的principal对象没有id等自定义属性

BUG写累了分享下笔记-关于spring-security-oauth2传递的principal对象没有id等自定义属性

只分享思路没有代码
下边是正题
我们进入debug模式,逆向分析这个principal怎么来的.点打上断点看下是哪来的(后面每次请求debug都用’->'代替)
->
在这里插入图片描述
可以看到是一个UsernamePasswordAuthenticationToken的对象,计入这个类可以看到一个构造方法,我们在构造方法内打上断点,看下是谁创建的
->在这里插入图片描述
我们f它可以看到extractAuthentication(Map<String, ?> map)方法,传进来的参数已经没有id啊之类的参数了,我们继续往前翻
在这里插入图片描述
这个类144行的extractAuthentication(Map<String, ?> map)方法,然后是这个资源服务器的起点了,可以看到这么一行代码
Map<String, Object> map = postForMap(checkTokenEndpointUrl, formData, headers);
而这个map里的参数还不是我们想要的,所以就要去授权服务器找了
在这里插入图片描述
目标/oauth/check_token接口,ctrl+h 全局搜索,冲鸭!
在这里插入图片描述
进入接口后可以看到方法内有这几行代码

OAuth2Authentication authentication = resourceServerTokenServices.loadAuthentication(token.getValue());    //获取信息
Map<String, Object> response = (Map<String, Object>)accessTokenConverter.convertAccessToken(token, authentication);    //转换
  • 1
  • 2

到底是哪个出了问题呢?
在这里插入图片描述
分析啥?debug它不香嘛?
如果authentication这个对象的参数不是你想要的,就是对应第一种情况,解决方法就是实现UserDetails,然后就是抄袭官方提供的User类
如果authentication没问题继续往下翻在这里插入图片描述
打上断点F5进入,可以看到

response.putAll(userTokenConverter.convertUserAuthentication(authentication.getUserAuthentication()));
  • 1

这就是参数转换的方法,我们debug跳进去
在这里插入图片描述
可以看到它只是把authentication.getName()存进去了,所以我们要重写这个方法
但是还有一个问题,就是我们怎么把它给应用到框架中
我退回DefaultAccessTokenConverter这个类 搜索userTokenConverter可以看到

public void setUserTokenConverter(UserAuthenticationConverter userTokenConverter) {
     this.userTokenConverter = userTokenConverter;
}
  • 1
  • 2
  • 3

我们只需要set进去就可以了在这里插入图片描述最后就是配到端点了

反面教材效果图在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/481492
推荐阅读
相关标签
  

闽ICP备14008679号