我有一个使用 Spring Social 的 webapp。
根据文档中的示例(发布到 /connect/twitter),我有一个按钮可以将登录用户连接到 Twitter,并且我的用户可以连接到 Twitter 帐户并获取所有常用帐户信息/令牌等。
但是,我想在 Spring-Social 连接到 Twitter 帐户后覆盖它的默认行为(在这种情况下,我不想实现默认视图,我希望成功/失败将用户引导回正常的主页页面并将提供信息等)。所以我已经覆盖了 ConnectController,一切都很好:
@Controller
@RequestMapping("/connect")
public class ConnectController extends org.springframework.social.connect.web.ConnectController {
@Inject
public ConnectController(ConnectionFactoryLocator connectionFactoryLocator, ConnectionRepository connectionRepository) {
super(connectionFactoryLocator, connectionRepository);
}
@Override
protected String connectedView(String providerId) {
return "redirect:/";
}
}
我连接到 twitter,我的覆盖 ConnectController 接管并将用户重定向到主页,而不是尝试查找相关视图。
但是,我现在还想提供一个拦截器,它会在连接后自动进行进一步的 API 调用以获取更多数据 - 并遵循此处的示例:http: //docs.spring.io/spring-social/docs/1.0.x /reference/htmlsingle/#connect-interceptors我创建了一个拦截器:
public class TwitterConnectionInterceptor implements ConnectInterceptor<Twitter> {
@Autowired TwitterService twitterService;
@Override
public void preConnect(ConnectionFactory<Twitter> connectionFactory, MultiValueMap<String, String> parameters, WebRequest request) { }
@Override
public void postConnect(Connection<Twitter> connection, WebRequest request) {
twitterService.importTwiterDetails();
}
}
按照上面链接的文档,我还更新了我的配置以将拦截器显式添加到我的 ConnectController:
@Bean public TwitterConnectionInterceptor twitterConnectionInterceptor(){
return new TwitterConnectionInterceptor();
}
@Bean public ConnectController connectController() {
com.tmm.frm.spring.social.ConnectController controller = new com.tmm.frm.spring.social.ConnectController(connectionFactoryLocator(),
connectionRepository());
controller.addInterceptor(twitterConnectionInterceptor());
return controller;
}
但是,当我连接到 Twitter 时,拦截器没有触发(调试它,拦截器没有在我的控制器上注册)。我想这可能是因为我的ConnectController
类具有@Controller
注释并且位于我在启动时扫描的包之一中,但是,我尝试将该控制器从扫描的包中移出并将其留给我的显式 bean 配置,但它只是根本没有注册,我没有得到我的自定义重定向。
谁能建议我如何覆盖控制器并添加拦截器或我可能做错了什么?