首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring社交Facebook

Spring社交Facebook
EN

Stack Overflow用户
提问于 2014-11-11 18:42:21
回答 2查看 978关注 0票数 3

我在快速入门示例中使用Spring Social和Thymeleaf进行开发,但我意识到它只支持每个控制器一个Facebook对象。这意味着该示例不能为多个用户提供支持,我猜这与变量的@Scope有关。它在Spring启动容器中运行,我想知道如何配置它,以便每个会话都有自己的Facebook对象。

EN

回答 2

Stack Overflow用户

发布于 2014-11-12 13:38:48

正如您所建议的,Facebook对象应该配置为具有请求作用域。如果你正在使用配置支持和/或Spring Boot,那么它将是请求作用域。因此,即使向控制器注入一次Facebook实例,该实例实际上也是一个代理,它将委托给在请求时为经过身份验证的用户创建的真实FacebookTemplate实例。

我只能假设您指的是http://spring.io/guides/gs/accessing-facebook/的入门指南示例。在这种情况下,它使用了Spring Social可能使用的最简单的Spring Boot自动配置,其中包括UserIdSource的基本实现(尚未用于生产),它总是返回“匿名”作为用户ID。因此,在您创建第一个Facebook连接后,第二个浏览器会尝试查找“匿名”连接,找到它,并为您提供一个授权的Facebook对象。

这可能看起来很奇怪,但它是一个示例应用程序,旨在让你started...and它做到了。要获得一个真正的UserIdSource,您需要做的就是将Spring Security添加到项目中。这将告诉Spring Social autoconfiguration配置一个从安全上下文获取当前用户ID的UserIdSource。这反映了Spring Social在现实世界中的使用,尽管显然更多地涉及到Spring Social,并且超出了入门指南的范围。

但是你可以在https://github.com/spring-projects/spring-social-samples/tree/master/spring-social-showcase-boot上找到Spring Boot中Spring Social的更完整的例子。

票数 2
EN

Stack Overflow用户

发布于 2017-05-04 17:37:42

Spring Boot在后台自动配置了很多东西。它会自动配置Facebook、LinkedIn和Twitter的属性,并为社交提供者设置连接工厂。

然而,UserIdSource的实现总是返回“匿名”作为用户ID。一旦建立了第一个Facebook连接,第二个浏览器将尝试为“匿名”找到一个连接,并为您提供一个授权的Facebook对象。

代码语言:javascript
复制
@Configuration
@EnableSocial
@ConditionalOnWebApplication
@ConditionalOnMissingClass("org.springframework.security.core.context.SecurityContextHolder")
protected static class AnonymousUserIdSourceConfig extends SocialConfigurerAdapter {

    @Override
    public UserIdSource getUserIdSource() {
        return new UserIdSource() {
            @Override
            public String getUserId() {
                return "anonymous";
            }
        };
    }
}

解决方案

The solution将覆盖“匿名”作为每个新用户/会话的UserId。因此,对于每个会话,我们可以简单地返回一个SessionID,但是,它可能不足以识别用户,特别是如果它被缓存或存储在连接数据库中的某个地方。

代码语言:javascript
复制
@Override
public String getUserId() {
    RequestAttributes request = RequestContextHolder.currentRequestAttributes();
    String uuid = (String) request.getAttribute("_socialUserUUID", RequestAttributes.SCOPE_SESSION);
    if (uuid == null) {
        uuid = UUID.randomUUID().toString();
        request.setAttribute("_socialUserUUID", uuid, RequestAttributes.SCOPE_SESSION);
    }
    return uuid;
}

The solution for above problem has been talked about in detail over here

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26862956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档