采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
QQ登陆后断点到SocialAuthenticationProvider的toUserId方法,发现usersConnectionRepository实例化是InMemoryUsersConnectionRepository,但是配置的是JdbcUsersConnectionRepository
感谢帮助,我顺便跟着再分析了一遍。
我们的两个类:SocialConfig、QQAutoConfig 都继承了 SocialConfigurerAdapter:
QQAutoConfig --> SocialAutoConfigurerAdapter --> SocialConfigurerAdapter(此处返回InMemoryUsersConnectionRepository) --> SocialConfigurer
SocialConfig --> SocialConfigurerAdapter -> SocialConfigurer,因为重写返回的是:JdbcUsersConnectionRepository
SocialConfig 的注解 @EnableSocial 会Import(SocialConfiguration.class),
SocialConfiguration 中:
@Autowired public void setSocialConfigurers(List<SocialConfigurer> socialConfigurers)
Spring会自动把 SocialConfigure 的实现类,注入到List中来,这个顺序将影响我们取得的usersConnectionRepositor,如下。
org.springframework.social.config.annotation.SocialConfiguration#usersConnectionRepositor
中遍历“socialConfigurers”取“ucrCandidate”,断点可以看到List中的第一个是 “QQAutoConfig”(继承了SocialAutoConfigurerAdapter),故其调用
org.springframework.social.config.annotation.SocialConfigurerAdapter#getUsersConnectionRepository
返回`InMemoryUsersConnectionRepository`;
分析后,我觉得可以有两种办法:
QQAutoConfig 重写 getUsersConnectionRepository 方法,返回 null, 这样在 “ucrCandidate”会有null判断,进而会取 SocialConfig 中的JdbcUsersConnectionRepository
如题主说是,在SocialConfig 定义@Order (1),或者QQAutoConfig 也指定@Order,让后者数字大于前者
厉害,多谢了
我也跟了半天,就是没有跟到QQAutoConfig中去。。。感谢!
没人回答!那就自己回答下怎么解决的吧,经过两天排查和质料查阅,都没发现配置代码逻辑问题,最后在万般无奈的情境下,把SocialConfig移到了项目的根路径,重启后发现好了,对,好。。。。好。。。。了,就是这么神奇,感觉这个应该是和编译顺序有关系,具体等有时间在排查下
朋友,我也遇到了跟你一样的问题,但是我把SocialConfig移到main/src或security.core包下,还是没用,依然实例化的InMemoryUsersConnectionRepository。能指一二嘛?我都熬了好几晚啦
应该是加载顺序的问题,导致默认加载了内存方式,没有加载成JDBC的方式,你可以尝试配置到和security配置同级的目录看看
@Order(1)public class SocialConfig extends SocialConfigurerAdapter {
// ... ...
}
我也遇到相同的问题,熬了几夜了,还没有解决,老师能帮忙看下吗?
@Order(1) public class SocialConfig extends SocialConfigurerAdapter {} 加上@Order注解 ,我的问题解决了。 【@Order标记定义了组件的加载顺序。】
居然自动换行了,笑哭~,给SocialConfig 类加上@Order(1) 注解就行了
感谢,解决了我的问题
登录后可查看更多问答,登录/注册
Spring Security技术栈,REST风格开发常见接口,独立开发认证授权模块保证REST服务安全
2.2k 2
1.5k 1
2.7k 16
1.6k 14
5.8k 12