Spring 春联:“春联”;无法获取ConnectionRepository:没有用户登录";

Spring 春联:“春联”;无法获取ConnectionRepository:没有用户登录";,spring,facebook,spring-security,spring-social,spring-social-facebook,Spring,Facebook,Spring Security,Spring Social,Spring Social Facebook,我正在尝试使用Facebook登录,如中所述 当我试图创建JdbcUsersConnectionRepository时,我需要类路径中的spring安全性。 当我添加spring安全性时,我收到 "java.lang.IllegalStateException: Unable to get a ConnectionRepository: no user signed in" 当尝试接收连接时 Connection<Facebook> connection = connection

我正在尝试使用Facebook登录,如中所述

当我试图创建JdbcUsersConnectionRepository时,我需要类路径中的spring安全性。 当我添加spring安全性时,我收到

"java.lang.IllegalStateException: Unable to get a ConnectionRepository: no user signed in"
当尝试接收连接时

Connection<Facebook> connection = connectionRepository.findPrimaryConnection(Facebook.class);

所有这些只有在spring security位于类路径时才会发生

社交连接应该对应于任何身份验证用户。似乎用户应该通过用户名/密码或服务提供商登录。试看

这是因为默认情况下使用

在内部,SpringSocial的配置支持将使用UsersConnectionRepository创建请求范围的ConnectionRepository bean。这样做时,它必须识别当前用户。因此,我们还必须重写getUserIdSource()以返回UserIdSource的实例

在本例中,我们将返回AuthenticationNameUserIdSource的一个实例。UserIdSource接口的这个实现假设应用程序使用Spring安全性进行保护。它使用SecurityContextHolder查找SecurityContext,并从中返回身份验证对象的name属性

如果您的应用程序没有使用Spring安全性进行保护,那么您需要将UserIdSource接口实现为适合您的应用程序安全机制的接口。UserIdSource界面如下所示:

getUserId()方法只返回唯一标识当前用户的字符串


更多信息

如果您使用的是Spring boot,则属性security basic不应设置为false。在
应用程序.properties中隐藏此行。这将禁用安全性,如果禁用了spring安全性,则boot将抛出错误

#security.basic.enabled=false

你能给我举一个Facebook的UserIdSource实现的例子吗?为了返回用户id,我需要知道用户是否已连接。我不能这样做,因为我不能调用connectionRepository.findPrimaryConnection(Facebook.class)@PavelBernshtam你好!为什么您的用户不登录,而您尝试为他获取社交连接(SecurityContextHolder.getContext().getAuthentication()为空)?社交关系应该与任何用户对应。似乎用户应该通过用户名/密码或服务提供商登录。你试过吗?
"java.lang.IllegalStateException: Unable to get a ConnectionRepository: no user signed in"
package org.springframework.social;
public interface UserIdSource {
    String getUserId();
}
#security.basic.enabled=false