1

我已经开始使用 spring social 并按照这里的教程进行操作。以及随后的页面。我的 java 文件看起来像这样。

import org.springframework.boot.autoconfigure.EnableAutoConfiguration;

//import org.springframework.boot.SpringApplication;
//import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.social.connect.Connection;
import org.springframework.social.connect.ConnectionFactory;
import org.springframework.social.connect.ConnectionFactoryLocator;
import org.springframework.social.connect.support.ConnectionFactoryRegistry;
import org.springframework.social.facebook.api.Comment;
import org.springframework.social.facebook.api.CommentOperations;
import org.springframework.social.facebook.connect.FacebookConnectionFactory;
import org.springframework.social.facebook.api.Facebook;
import org.springframework.social.facebook.api.impl.FacebookTemplate;
import org.springframework.social.oauth2.AccessGrant;
import org.springframework.social.oauth2.GrantType;
import org.springframework.social.oauth2.OAuth2Operations;
import org.springframework.social.oauth2.OAuth2Parameters;
//import org.springframework.social.UserIdSource;
//import org.springframework.social.connect.ConnectionFactoryLocator;
//import org.springframework.social.connect.ConnectionRepository;
//import org.springframework.social.connect.web.ConnectController;

@Configuration
@EnableAutoConfiguration
@Import(FacebookConfig.class)
@ComponentScan
public class App {

   static private String accessToken = "accesstoken";
   static private String secretKey = "secretkey"; 
   static private String clientId = "clientid";
   public static void main(String[] args) {
        FacebookConnectionFactory connectionFactory = new FacebookConnectionFactory(clientId, secretKey);
        OAuth2Operations oauthOperations = connectionFactory.getOAuthOperations();
        OAuth2Parameters params = new OAuth2Parameters();
        params.setRedirectUri("http://facebook.com");
        String authorizeUrl = oauthOperations.buildAuthorizeUrl(GrantType.IMPLICIT_GRANT, params);
        AccessGrant accessGrant = new AccessGrant(accessToken);
        System.out.println(accessGrant.getAccessToken());
        System.out.println(accessGrant.getExpireTime());
        System.out.println(accessGrant.getScope());
        ConnectionFactoryRegistry registry = new ConnectionFactoryRegistry();
        registry.addConnectionFactory(connectionFactory);
        Facebook facebook = new FacebookTemplate(accessToken);
}

}

当我运行此代码时,我收到所述错误。无法在项目 mavenproject3 上执行目标 org.codehaus.mojo:exec-maven-plugin:1.2:exec (default-cli):命令执行失败。进程退出并出现错误:1(退出值:1)-> [帮助 1]

要查看错误的完整堆栈跟踪,请使用 -e 开关重新运行 Maven。使用 -X 开关重新运行 Maven 以启用完整的调试日志记录。

有关错误和可能的解决方案的更多信息,请阅读以下文章:[帮助 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

当我注释掉这一行时:

Facebook facebook = new FacebookTemplate(accessToken);

它工作正常。有人可以建议我的必要条件。我是新手,请多多包涵。

4

1 回答 1

1

您提到的 URL 并不是一个真正的教程,而是一个参考。诚然,它有点详细,对新用户来说不是很有帮助。适当地注意到...希望我一有时间就会写一个新的教程。

你从哪里得到 accessToken 的值?如果您没有通过与 Facebook 的 OAuth2“共舞”获得它,那么它将无法正常工作。

首先,我看到你创建了一个 FacebookConnectionFactory 来获取一个 OAuth2Operations,通过它你设置一个重定向 URI 等,等等。然后为隐式授权构建一个授权 URL。那里有几件事不合时宜:

  • Facebook 不支持隐式授权。它仅支持授权码授予和客户端令牌授予。即便如此,通过隐式授权和授权代码授权,您的应用程序必须重定向到 Facebook(在 Web 浏览器中)才能获得用户的许可。一旦获得批准,它将重定向回您的应用程序......说到这个......
  • 您设置的重定向 URI 是http://facebook.com。这应该是您的应用程序的 URL ,Facebook 将在授权后重定向回该 URL。
  • 毕竟,您甚至从未使用过 authorizeUrl ......它只是在一个字符串中。由于已经提到的原因,即使您确实使用了它也不会起作用,但是前 5 行左右都是徒劳的。
  • 您创建一个 ConnectionFactoryRegistry 并使用它注册 FacebookConnectionFactory...但是您对 ConnectionFactoryRegistry 什么也不做。没关系……无论如何,你几乎不需要对它做任何事情,因为它主要作为 ConnectController 的助手存在。

如果没有重定向“舞蹈”,就没有获得面向用户的访问令牌的好方法。获得您将代表您访问 Facebook 的用户的许可非常重要。如果它比这更容易,那么创建一个向 Facebook 发送垃圾邮件并从本质上破坏每个人的体验的应用程序就容易了。

通过重定向“舞蹈”获取访问令牌的工作由使用 ConnectController 的框架自动处理。当然,如果您愿意,您可以自己做,但 ConnectController 会为您处理所有这些。

由于目前缺乏适当的教程,我建议您查看https://github.com/spring-projects/spring-social-samples/tree/master/spring-social-showcase此外,在https://github.com/spring-projects/spring-social-samples/tree/master/spring-social-showcase-boot上还有一个面向 Spring Boot 的版本,它更加简化了配置(尽管它依赖于尚未在官方 Spring Boot 版本中的更改)。

于 2014-06-20T16:03:14.610 回答