0

Facebook用のアプリを開発しようとしています。Facebookコントローラーを作成し、connectionFactoryオブジェクトを作成し、oAuth操作とaccessgrantオブジェクトを取得しました。アクセストークンも取得しましたが、接続を作成しようとすると

Connection<Facebook> connection = connectionFactory.createConnection(accessGrant);

エラーが発生しています:

MissingAuthorizationException: 操作には承認が必要ですが、API バインディングは承認なしで作成されました。

完全なスタック トレース:

[1/25/12 9:18:17:097 IST] 0000001a SystemOut O oauthOperations :org.springframework.social.facebook.connect.FacebookOAuth2Template@46714671
[1/25/12 9:18:17:097 IST] 0000001a SystemOut O authorizeUrl :https://graph.facebook.com/oauth/authorize?client_id=xxxxx&response_type=code&redirect_uri=http%3A%2F%2Flocalhost%3A80% 2FSpringSocial%2Fstart&scope=read_stream%2Cemail%2Cpublish_stream%2Coffline_access
[1/25/12 9:19:15:930 IST] 0000001a SystemOut O oauthOperations authorizationCode :org.springframework.social.facebook.connect.FacebookOAuth2Template@46714671
[1/25/12 9:19:25:197 IST] 0000001a SystemOut O accssTokentemp: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
[1/25/12 9:19:35:541 IST] 0000001a SystemOut O Facebook :org.springframework.social.facebook.api.impl.FacebookTemplate@21c221c2
[1/25/12 9:19:35:994 IST] 0000001a RestTemplate W org.springframework.web.client.RestTemplate handleResponseError "https://graph.facebook.com/me" に対する GET リクエストで 400 (Bad Request ); エラー ハンドラの呼び出し
[1/25/12 9:19:36:041 IST] 0000001a サーブレット E com.ibm.ws.webcontainer.servlet.ServletWrapper サービス SRVE0068E: アプリケーション SpringSocialFacebookEar 内のサーブレット SpringSocial のサービス メソッドの 1 つで作成された、キャッチされない例外。例外が作成されました: org.springframework.web.util.NestedServletException: リクエストの処理に失敗しました。ネストされた例外は org.springframework.social.MissingAuthorizationException: 操作には承認が必要ですが、API バインディングは承認なしで作成されました。
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:681) で
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:574) で
    javax.servlet.http.HttpServlet.service(HttpServlet.java:718) で
    javax.servlet.http.HttpServlet.service(HttpServlet.java:831)
    com.ibm.ws.cache.servlet.ServletWrapper.serviceProxied (ServletWrapper.java:307) で
    com.ibm.ws.cache.servlet.CacheHook.handleFragment(CacheHook.java:579) で
    com.ibm.ws.cache.servlet.CacheHook.handleServlet(CacheHook.java:250) で
    com.ibm.ws.cache.servlet.ServletWrapper.service(ServletWrapper.java:259) で
    com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1663)
    com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:939) で

原因: org.springframework.social.MissingAuthorizationException: 操作には承認が必要ですが、承認なしで API バインディングが作成されました。
    org.springframework.social.facebook.api.impl.FacebookErrorHandler.handleFacebookError(FacebookErrorHandler.java:95) で
    org.springframework.social.facebook.api.impl.FacebookErrorHandler.handleError(FacebookErrorHandler.java:60) で
    org.springframework.web.client.RestTemplate.handleResponseError(RestTemplate.java:486) で
    org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:443)で
    org.springframework.web.client.RestTemplate.execute(RestTemplate.java:415) で
    org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:213) で
    org.springframework.social.facebook.api.impl.FacebookTemplate.fetchObject(FacebookTemplate.java:165) で
    org.springframework.social.facebook.api.impl.UserTemplate.getUserProfile(UserTemplate.java:50) で
    org.springframework.social.facebook.api.impl.UserTemplate.getUserProfile(UserTemplate.java:46) で
    org.springframework.social.facebook.connect.FacebookAdapter.setConnectionValues(FacebookAdapter.java:42) で
    org.springframework.social.facebook.connect.FacebookAdapter.setConnectionValues(FacebookAdapter.java:30) で
    org.springframework.social.connect.support.AbstractConnection.setValues(AbstractConnection.java:172) で
    org.springframework.social.connect.support.AbstractConnection.initKey(AbstractConnection.java:135) で
    org.springframework.social.connect.support.OAuth2Connection.(OAuth2Connection.java:73) で
    org.springframework.social.connect.support.OAuth2ConnectionFactory.createConnection(OAuth2ConnectionFactory.java:58) で
    com.tgt.social.controller.FaceBookConnectController.facebookConnect (FaceBookConnectController.java:107) で

私のコントローラークラス:

@Controller
public class FaceBookConnectController {

    private static OAuth2Operations oauthOperations = null;
    private static FacebookConnectionFactory connectionFactory = null;
    private static OAuth2Parameters params = null;

    @RequestMapping("/start")
    public ModelAndView facebookConnect(Model model,HttpServletRequest request,HttpServletResponse response) {
        Security.setProperty("ssl.SocketFactory.provider", "com.ibm.jsse2.SSLSocketFactoryImpl");   
        Security.setProperty("ssl.ServerSocketFactory.provider", "com.ibm.jsse2.SSLServerSocketFactoryImpl");
        System.setProperty("https.proxyHost", "localhost");
        System.setProperty("https.proxyPort", "8888");

        String clientId = "xxxxxxxxx";
        String clientSecret = "xxxxxxxxxxxxxxxxxxxxxxxxxx";
        String redirectUrl = "http://localhost:80/SpringSocial/start";

        try {
            String authorizationCode = request.getParameter("code");
            if(null != authorizationCode){
                MultiValueMap paramsMap1 = new LinkedMultiValueMap();
                System.out.println("oauthOperations authorizationCode :"+oauthOperations);
                //paramsMap.set("client_id", clientId);
                //paramsMap.set("client_secret", clientSecret);
                //paramsMap.set("code", authorizationCode);
                paramsMap1.set("redirect_uri", redirectUrl);
                paramsMap1.set("grant_type", "authorization_code");
                paramsMap1.set("scope","read_stream,user_about_me,user_birthday,user_likes,user_status,email,publish_stream,offline_access");
                //AccessGrant accessGrant = oauthOperations.exchangeForAccess(authorizationCode, redirectUrl, paramsMap1);
                System.out.println("connectionFactory authorizationCode :"+connectionFactory);
                AccessGrant accessGrant = connectionFactory.getOAuthOperations().exchangeForAccess(authorizationCode, redirectUrl, paramsMap1);
                String accssTokentemp = accessGrant.getAccessToken();
                System.out.println("accssTokentemp :"+accssTokentemp);
                String scope_p = accessGrant.getScope();
                System.out.println("scope_p :"+scope_p);
                Facebook facebook = new FacebookTemplate(accssTokentemp);
                System.out.println("facebook :"+facebook);
                Connection<Facebook> connection = connectionFactory.createConnection(accessGrant);
                //FacebookProfile userProfile = facebook.userOperations().getUserProfile();
                System.out.println("connection :"+connection);

            }else{
                MultiValueMap paramsMap = new LinkedMultiValueMap();
                connectionFactory = new FacebookConnectionFactory(clientId,clientSecret);
                System.out.println("connectionFactory :"+connectionFactory);
                oauthOperations = connectionFactory.getOAuthOperations();
                params = new OAuth2Parameters();
                params.setRedirectUri(redirectUrl);
                params.setScope("read_stream,user_about_me,user_birthday,user_likes,user_status,email,publish_stream,offline_access");
                paramsMap.set("client_id", clientId);
                paramsMap.set("client_secret", clientSecret);
                paramsMap.set("code", authorizationCode);
                paramsMap.set("redirect_uri", redirectUrl);
                paramsMap.set("grant_type", "authorization_code");
                System.out.println("oauthOperations :"+oauthOperations);
                String authorizeUrl = oauthOperations.buildAuthorizeUrl(GrantType.AUTHORIZATION_CODE, params);
                System.out.println("authorizeUrl :"+authorizeUrl);
                response.sendRedirect(authorizeUrl);
            }

        } catch (IOException e) {
            e.printStackTrace();
        }

       return null;  
    }
}

ここで何が間違っているのか教えてください。connectionFactory オブジェクトのインスタンス化が正しくありません。

4

1 に答える 1