我的spring-social ConnectController出了什么问题?

时间:2016-02-03 22:15:28

标签: spring-mvc oauth oauth-2.0 spring-boot spring-social

我正在尝试制作一个Spring Boot应用程序,它将使用spring-social连接到Fitbit的api。我(中途)实现了一个ConnectionFactory,它是Fitbit的依赖项,我正试图从我的应用程序中使用它。部分原因是启动ConnectController来处理OAuth2“舞蹈”。

当我尝试通过浏览器ConnectControllerhttp://localhost:8080/connect点击http://localhost:8080/connect/fitbit时,我会被重定向到whitelable错误页面并显示以下消息:

  

出现意外错误(type = Method Not Allowed,status = 405)。

     

请求方法'GET'不受支持

我真的不明白我所看到的内容,但是当我设置DEBUG级别日志记录并使用一些断点时,看起来好像从浏览器中点击/connect导致Spring试图找到一个名为connect/status并点击/connect/fitbit会导致春天尝试找到名为/connect/fitbitConnect的内容,然后尝试在内部向/connect/connect/fitbitConnect发出GET请求。

在这两种情况下,看起来ConnectController对应/connect/connect/{providerId}的方法被称为罚款,然后弹簧炸弹寻找所有其他东西时。

以下是我正在使用的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);
    }

}

这到底是怎么回事?我究竟做错了什么?

1 个答案:

答案 0 :(得分:1)

我认为这与你在ConnectController中关于GET与POST的问题有关,所以你可能已经自己回答了这个问题。尽管如此,让我澄清为什么它正在寻找连接/状态和连接/ fitbitConnect。

这些是视图名称。当您执行GET for / connect时,您要求ConnectController获取所有提供程序的连接状态并将其放入模型中,之后它会将该模型转发到逻辑名称为“connect / status”的视图。通常这是路径“/connect/status.jsp”中的JSP或“/connect/status.html”上的Thymeleaf模板,但它可以是遵循任何Spring MVC视图解析器的规则的任何视图。

同样,对/ connect / fitbit的GET请求要求ConnectController获取“fitbit”提供程序的连接状态,并将该信息放在模型中并将其转发到名称为“/ connect / fitbitConnect”的视图(如果没有连接)或“/ connect / fitbitConnected”(如果有连接)。

除了回答您的问题之外,我还可以请求您告诉我有关您的FitBit Spring社交服务提供商项目的更多信息吗?它是否模仿其他社区主导的Spring Social项目?换句话说,它是其他人可能使用的Spring Social的独立扩展吗?如果是这样,请告诉我它在GitHub中的位置,我很乐意将其添加到http://projects.spring.io/spring-social/的“社区项目”部分。