背景
在spring-security-oauth组件中获取用户信息接口,第三方返回的是
{
"id":"xxxx",
"attr":{
"xx":""
}
}
在security-oauth中解析用户信息写了
public Authentication extractAuthentication(Map<String, ?> map) {
//其中username,spring定义了固定值,并且没有配置final String USERNAME = "user_name";
if (map.containsKey(USERNAME)) {
Object principal = map.get(USERNAME);
Collection<? extends GrantedAuthority> authorities = getAuthorities(map);
if (userDetailsService != null) {
UserDetails user = userDetailsService.loadUserByUsername((String) map.get(USERNAME));
authorities = user.getAuthorities();
principal = user;
}
return new UsernamePasswordAuthenticationToken(principal, "N/A", authorities);
}
return null;
}
方案
- 找spring有没有配置更改这个值
final String USERNAME = "user_name";本人没找到 - 重写源码
1.找到源码位置

2.在项目中建相同的包名

3.重写

4.执行
maven clean install
该博客讨论了在Spring Security OAuth组件中遇到的问题,即第三方返回的用户信息格式与默认配置不匹配。作者尝试查找Spring是否提供配置更改固定的用户名字段`USERNAME`未果,因此选择了重写源码的解决方案。具体步骤包括定位源码、在项目中复制相同包并重写方法、执行`mvn clean install`以替换原有组件。通过这种方法,作者成功地适应了第三方返回的用户信息格式。
289

被折叠的 条评论
为什么被折叠?



