oauth2 提供的接口oauthtoken,第一个参数是接口Principal,参数的实际类型是UsernamePasswordAuthenticationToken

mac2024-05-19  29

最近在看oauth的源码 ,发现 TokenEndpoint 这个类里面,/oauth/token 这个接口的第一个请求参数是接口Principal类型,实际上传过来的是UsernamePasswordAuthenticationToken类型,UsernamePasswordAuthenticationToken实现了Principal接口。

那么框架是在哪将请求参数封装成UsernamePasswordAuthenticationToken的呢?

如下图,首先打个断点,在方法调用栈里面,查看哪里给这个方法设置参数了。

一步步跟踪,会发现是在 InvocableHandlerMethod 的 invokeForRequest 方法里,通过反射调用,如下图:

接下来只需要看 getMethodArgumentValues 这个方法做了什么就知道了。跟着图片一步步往下走,

ServletRequestMethodArgumentResolver.resolveArgument(...):

SecurityContextHolderAwareRequestWrapper.getUserPrincipal():

最后可以发现,是secutity 框架本身的 SecurityContextHolderAwareRequestWrapper 实例化参数Principal的。

最新回复(0)