我想配置 Spring Social,但示例提供了一些我实际上不需要的东西。 正在查看this例如有 UserIdSource、UserConnectionRepository、ConnectController、ProviderSignInController、DisconnectController、ReconnectFilter。 我只想使用 Facebook 的 Graph API 以及 Twitter 的时间轴操作来获取特定用户的最新推文。我的网页上没有任何登录服务。
我当前的配置如下:
@Configuration
public class SocialConfiguration {
@Autowired
private Environment env;
@Bean
public Facebook facebook() {
return new FacebookTemplate(env.getProperty("facebook.accessToken"));
}
@Bean
public Twitter twitter() {
return new TwitterTemplate(env.getProperty("twitter.consumerKey"),
env.getProperty("twitter.consumerSecret"),
env.getProperty("twitter.accessToken"),
env.getProperty("twitter.accessTokenSecret"));
}
}
这对于 Twitter 来说非常有效,但 Facebook 的访问 token 只是暂时的。 起初,获取页面相册时不需要访问 token 。 但现在我们需要一个来获取公开专辑的所有信息,例如专辑类型(原文如此!)。
是否有配置 Spring Social 而不使用登录服务的示例?
最佳答案
首先,从环境中获取 Facebook 的 token 并不是一个好主意。如果您想要做的是获取用户的帖子,则 token 将需要是用户 token (而不是更受限制的应用程序 token )。获取该 token 的方法是通过 Spring Social 的 ConnectController 提供的授权流程运行用户。此流程要求用户至少登录 Facebook 并授权该应用程序。他们是否登录您的应用程序有点取决于用户是谁。
(请注意,尽管 Twitter 访问 token 不会过期,但 Twitter 也是如此。由于它们不会过期,因此您可以通过其他方式获取访问 token ,然后将其硬编码到您的配置中。这并不是它真正的用途,但它会起作用。)
典型的流程是让用户登录您的应用程序(直接通过某个应用程序登录页面或间接通过 Facebook、Twitter 等),然后通过 ConnectController 流程获取授权(从而获得访问 token )。在典型的流程中,您不会直接实例化 FacebookTemplate 或 TwitterTemplate 的实例 - 它们是通过 Connection(代表 ConnectController 获得的授权)为您实例化的。
为了处理过期的 token ,Spring Social 还提供了 ReconnectFilter,如果它检测到由于某种原因访问 token 不再有效,它会尝试重新建立连接(通过 ConnectController 返回)。尽管这意味着用户的浏览器将被重定向到 Facebook 并返回,但只要授权仍然有效( token 会过期,授权不会),用户就不会注意到重定向。如果授权仍然有效,Facebook 将重定向回来,而不提示用户授权。
如果您是用户,那么您可以绕过应用程序的身份验证,设置始终返回相同 ID(无论您想要什么)的 UserIdSource,然后将关联授权到那个ID。但您仍然需要完成授权流程才能获取访问 token 。
也就是说,欢迎您通过其他方式获取访问 token 并将其硬编码到您的配置中,但正如您所指出的, token 将过期,然后配置将不再起作用。
我能指出的最好的例子是 https://github.com/spring-projects/spring-social-samples/tree/master/spring-social-showcase-boot 。当然,它支持身份验证(直接身份验证和基于提供商的身份验证),但它确实演示了获取 FacebookTemplate 或 TwitterTemplate 实例的典型流程,其中涉及获取用户授权。您会发现涉及的 Spring Social 配置非常少(实际上,涉及的任何类型的配置都非常少),因为它利用了 Spring Boot 自动配置。如果您想要更明确的配置示例,请查看 https://github.com/spring-projects/spring-social-samples/tree/master/spring-social-showcase它不使用 Spring Boot。
(IMO,不过,你应该更喜欢使用 Spring Boot。)
关于java - 如何在页面上配置没有登录服务的Spring Social,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32201205/