赞
踩
最近在看oauth的源码 ,发现 TokenEndpoint 这个类里面,/oauth/token 这个接口的第一个请求参数是接口Principal类型,实际上传过来的是UsernamePasswordAuthenticationToken类型,UsernamePasswordAuthenticationToken实现了Principal接口。
那么框架是在哪将请求参数封装成UsernamePasswordAuthenticationToken的呢?
如下图,首先打个断点,在方法调用栈里面,查看哪里给这个方法设置参数了。
一步步跟踪,会发现是在 InvocableHandlerMethod 的 invokeForRequest 方法里,通过反射调用,如下图:
接下来只需要看 getMethodArgumentValues 这个方法做了什么就知道了。跟着图片一步步往下走,
ServletRequestMethodArgumentResolver.resolveArgument(...):
SecurityContextHolderAwareRequestWrapper.getUserPrincipal():
最后可以发现,是secutity 框架本身的 SecurityContextHolderAwareRequestWrapper 实例化参数Principal的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。