首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在春季社交facebook中处理ExpiredAuthorizationException (授权已过期)

如何在春季社交facebook中处理ExpiredAuthorizationException (授权已过期)
EN

Stack Overflow用户
提问于 2016-12-15 17:32:42
回答 1查看 573关注 0票数 3

我正在使用spring-social-facebook,有时身份验证似乎要过期了,我得到了这个异常:

代码语言:javascript
复制
org.springframework.social.ExpiredAuthorizationException: The authorization has expired.
    at org.springframework.social.facebook.api.impl.FacebookErrorHandler.handleFacebookError(FacebookErrorHandler.java:83)
    at org.springframework.social.facebook.api.impl.FacebookErrorHandler.handleError(FacebookErrorHandler.java:59)
    at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:667)
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:620)
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:595)
    at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:303)
    at org.springframework.social.facebook.api.impl.SocialContextTemplate.getSocialContext(SocialContextTemplate.java:120)

我不知道如何处理这个error...Would --在身份验证过期后能够自动重新连接吗?

使用的版本:

代码语言:javascript
复制
 <dependency>
    <groupId>org.springframework.social</groupId>
    <artifactId>spring-social-facebook</artifactId>
    <version>2.0.4.BUILD-SNAPSHOT</version>
</dependency>

<dependency>
    <groupId>org.springframework.social</groupId>
    <artifactId>spring-social-core</artifactId>
    <version>1.1.4.RELEASE</version>
</dependency>

我发现了类似的问题:

任何帮助都会被接受。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-31 17:38:31

要解决此问题,必须向社会配置ReconnectFilter文件中添加一个:

代码语言:javascript
复制
    @Bean
    public ReconnectFilter apiExceptionHandler(UsersConnectionRepository usersConnectionRepository, UserIdSource userIdSource) {
        return new ReconnectFilter(usersConnectionRepository, userIdSource);
    }

ReconnectFilter依赖于UserIdSource Bean来检索用户信息和刷新连接。你必须覆盖它:

代码语言:javascript
复制
 @Override
    @Bean
    public UserIdSource getUserIdSource() {
        return new UserIdSource() {
            @Override
            public String getUserId() {
                User user = getUser();
                if (user == null) {
                    throw new IllegalStateException("Unable to get a ConnectionRepository: no user signed in");
                }
                return user.getId();
            }
        };
    }

您可以在下面看到整个Social Config文件:

代码语言:javascript
复制
@Configuration
@PropertySource("classpath:application.properties")
@EnableSocial
public class SocialConfig  extends SocialConfigurerAdapter {

    @Override
    public void addConnectionFactories(ConnectionFactoryConfigurer cfConfig, Environment env) {
        cfConfig.addConnectionFactory(new FacebookConnectionFactory(env.getProperty("facebook.appKey"), env.getProperty("facebook.appSecret")));
    }


    @Bean
    public UsersConnectionRepository usersConnectionRepository(ConnectionFactoryLocator connectionFactoryLocator) {
        return new UserConnectionRepositoryImpl(connectionFactoryLocator);
    }

    @Override
    @Bean
    public UserIdSource getUserIdSource() {
        return new UserIdSource() {
            @Override
            public String getUserId() {
                User user = getUser();
                if (user == null) {
                    throw new IllegalStateException("Unable to get a ConnectionRepository: no user signed in");
                }
                return user.getId();
            }
        };
    }

    @Bean
    public ReconnectFilter apiExceptionHandler(UsersConnectionRepository usersConnectionRepository, UserIdSource userIdSource) {
        return new ReconnectFilter(usersConnectionRepository, userIdSource);
    }


    @Bean
    @Scope(value = "request", proxyMode = ScopedProxyMode.INTERFACES)
    public ConnectionRepository connectionRepository(ConnectionFactoryLocator connectionFactoryLocator) {

        User user = getUser();
        if (user == null) {
            throw new IllegalStateException("Unable to get a ConnectionRepository: no user signed in");
        }
        return usersConnectionRepository(connectionFactoryLocator).createConnectionRepository(user.getId());
    }

    @Bean
    @Scope(value = "request", proxyMode = ScopedProxyMode.INTERFACES)
    public Facebook facebook(ConnectionRepository repository) {
        Connection<Facebook> connection = null;

        if (repository != null) {
           connection = repository.findPrimaryConnection(Facebook.class);
        }

        return connection != null ? connection.getApi() : null;
    }


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

https://stackoverflow.com/questions/41170107

复制
相关文章

相似问题

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