java - 如何在页面上配置没有登录服务的Spring Social

标签 java spring facebook spring-social spring-social-facebook

我想配置 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/

相关文章:

facebook - 访问 Facebook Graph API 中的好友列表时出现 HTTP 400 错误

java - Spring - Bean 在过滤器中不可访问

java - JdbcTemplate — 记录数据源连接 url

java - 如何将 "filter"对象传递给 spring 数据 jpa 存储库以创建查询

java - NoSuchMethodError : org. codehaus.jackson.type.JavaType

php - 使用 Graph API 在 Facebook 照片中进行偏移(超过 25 张照片)

java - 权限错误 - 尝试使用 android facebook sdk 结交 friend

java - Java 双重检查锁定中的 volatile

java - 在谷歌地图中给定缩放级别计算 map 上方的高度

java - 从 Java 瘦客户端获取 Apache Ignite 缓存中的所有 key