После тщательного анализа кода я в конечном итоге решил сделать прямое изменение кода, чтобы изменить способ исключения ExpiredAuthorizationException класса OAuth2Connection в весеннем социальном ядре и через специальный фильтр (ReconnectFilter) весеннего социального ядра (включенного с версия 1.1.0.M3).
Для этого установите компонент фильтра пересоединения в социальной конфигурации.
@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 и создает новый через POST в /connect/facebook?reconnect=true
ConnectController
.
Использовалась социальная весна версии 1.1.0.M4.