【问题标题】:How to handle ExpiredAuthorizationException happening in spring social facebook?如何处理春季社交facebook中发生的ExpiredAuthorizationException?
【发布时间】:2014-01-17 14:43:02
【问题描述】:
我能够在 Spring Social 中使用 Facebook api 几天(3 个月或更长时间),但现在出现异常“org.springframework.social.ExpiredAuthorizationException:授权已过期”。
因此,我通过重新连接过滤器调查了自春季社交版本 1.1.0.M3 以来此问题已解决,但即使遵循建议我也无法更新令牌。
如何从这个异常中恢复?
【问题讨论】:
标签:
spring
spring-social
spring-social-facebook
【解决方案1】:
在对代码进行大量分析后,我最终解决了直接修改代码以改变 Spring Social Core 中的 OAuth2Connection 类以及通过 Spring Social Core 的特殊过滤器 (ReconnectFilter) 引发 ExpiredAuthorizationException 异常的方式(自版本起包含1.1.0.M3)。
为此,请在社交配置中设置重新连接过滤器的 bean。
@Bean
public ReconnectFilter apiExceptionHandler() {
return new ReconnectFilter(usersConnectionRepository, userIdSource()) ;
}
别忘了在你的 web.xml 中设置过滤器
<filter>
<filter-name>apiExceptionHandler</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>apiExceptionHandler</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
最后需要在org.springframework.social.connect.support.OAuth2Connection类模块spring-social-core中修改ExpiredAuthorizationException异常的抛出ExpiredAuthorizationException(null)到throw new to ExpiredAuthorizationException(getKey().getProviderId())
之后,过滤器会删除旧的 facebook 连接,并通过 /connect/facebook?reconnect=true 的 ConnectController 中的 POST 创建一个新连接。
使用的是1.1.0.M4版本的social spring。