【发布时间】:2016-05-13 08:16:35
【问题描述】:
我正在尝试制作一个 Spring Boot 应用程序,该应用程序将使用 spring-social 连接到 Fitbit 的 api。我已经(中途)实现了一个ConnectionFactory,它是 Fitbit 的依赖项,我正在尝试从我的应用程序中使用它。其中一部分涉及启动ConnectController 来处理OAuth2“舞蹈”。
当我尝试通过浏览器在http://localhost:8080/connect 或http://localhost:8080/connect/fitbit 上点击ConnectController 时,我会被重定向到带有以下消息的可白标错误页面:
出现意外错误(类型=不允许的方法,状态=405)。
不支持请求方法“GET”
我不太明白我看到了什么,但是当我设置 DEBUG 级别日志记录并使用一些断点时,看起来就像从浏览器中点击 /connect 会导致 Spring 试图找到名为 connect/status 的东西并且点击/connect/fitbit 导致spring 试图找到名为/connect/fitbitConnect 的东西,然后尝试在内部向/connect/connect/fitbitConnect 发出GET 请求。
在这两种情况下,看起来ConnectController 上对应于/connect 和/connect/{providerId} 的方法都被调用得很好,然后Spring 在寻找所有其他东西时会爆炸。
这是我正在使用的SocialConfigurer 实现,它创建了ConnectController bean:
@Configuration
@EnableSocial
@PropertySource("${properties.path}/fitbot-service.properties")
public class SpringSocialConfig implements SocialConfigurer{
@Override
public void addConnectionFactories(ConnectionFactoryConfigurer connectionFactoryConfigurer, Environment environment) {
connectionFactoryConfigurer.addConnectionFactory(new FitbitConnectionFactory(
environment.getProperty("fitbit.clientId"),
environment.getProperty("fitbit.clientSecret")
));
}
@Override
public UserIdSource getUserIdSource() {
return new SessionUserIdSource();
}
@Override
public UsersConnectionRepository getUsersConnectionRepository(ConnectionFactoryLocator connectionFactoryLocator) {
return new InMemoryUsersConnectionRepository(connectionFactoryLocator);
}
@Bean
public ConnectController connectController(ConnectionFactoryLocator connectionFactoryLocator, ConnectionRepository connectionRepository) {
return new ConnectController(connectionFactoryLocator, connectionRepository);
}
}
这里到底发生了什么?我究竟做错了什么?
【问题讨论】:
标签: spring-mvc oauth oauth-2.0 spring-boot spring-social