2014-12-05 75 views
0

你好,請幫我新的春天的社會,我同時獲得來自AUTHORIZATION_CODE訪問令牌獲取400錯誤..春實社會用的accessToken 400錯誤

我的代碼如下

@RequestMapping(value = "/facebook", method = RequestMethod.POST, produces = "application/json") 
    @ResponseBody 
    public Object getFacebookLoginPage(@RequestBody SocialCommand socialCommand) throws Exception { 
     loggerService.debug("In ShareController", "getFacebookLoginPage method for facebook", "returns the JSON response for the input socialCommand"); 
     Result result = new Result(); 
     result.status = "OK"; 
     dataObject = socialCommand; 
     FacebookConnectionFactory connectionFactory = new FacebookConnectionFactory(msgprop.getProperty("facebook.appId"), msgprop.getProperty("facebook.appSecrete"), msgprop.getProperty("facebook.namespace")); 
     oAuth2Operations = connectionFactory.getOAuthOperations(); 
     OAuth2Parameters params = new OAuth2Parameters(); 
     params.setScope(msgprop.getProperty("facebook.scope")); 
     params.setRedirectUri(msgprop.getProperty("facebook.redirectURI")); 
//  params.set("Content-Type", MediaType.MULTIPART_FORM_DATA.getType()); 
     String authorizeUrl = oAuth2Operations.buildAuthorizeUrl(GrantType.AUTHORIZATION_CODE, params); 
     System.out.println(authorizeUrl); 
     SuccessResponse successResponse = new SuccessResponse(); 
     successResponse.resultObj = authorizeUrl; 
     result.response = successResponse; 
     return result; 

    } 

和回調控制器是如下

@RequestMapping(value = "/facebook/callback", params = "code", method = RequestMethod.GET) 
    public Object faceBookCallback(@RequestParam(value = "code") String callBackCode, Model model) throws IOException { 
     loggerService.debug("In ShareController", "faceBookCallback method for facebook", "returns the JSON response for the input socialCommand"); 
     MultiValueMap<String, String> formData = new LinkedMultiValueMap<String, String>(); 
     formData.add("client_id", msgprop.getProperty("facebook.appId")); 
     formData.add("client_secret", msgprop.getProperty("facebook.appSecrete")); 
     formData.add("scope", msgprop.getProperty("facebook.scope")); 
     formData.add("redirect_uri", msgprop.getProperty("facebook.redirectURI")); 
     formData.set("grant_type", "authorization_code"); 
     formData.set("Content-Type", MediaType.MULTIPART_FORM_DATA.getType()); 
     AccessGrant accessGrant = oAuth2Operations.exchangeForAccess(callBackCode, msgprop.getProperty("facebook.redirectURI"), formData); 
     System.out.println(accessGrant.getAccessToken()); 
     appStatus.getActivityId(); 
     SocialCommand socialCommand = (SocialCommand) dataObject; 
     socialCommand.setAppType("facebook"); 
     socialCommand.setAccessToken(accessGrant.getAccessToken()); 
     getImageLocation(socialCommand); 

     model.addAttribute("activityId", appStatus.getActivityId()); 

     return "backToViewDetails"; 
    } 

oAuth2Operations.exchangeForAccess給予400壞請求

回答

0

我注意到了幾件事...

首先,爲什麼要編寫自己的控制器來執行OAuth舞蹈,而不是使用Spring Social提供的ConnectController? ConnectController可以處理所有重定向,並且從一開始就是Spring Social的一部分。 Spring Social Showcase(https://github.com/spring-projects/spring-social-samples/tree/master/spring-social-showcase)是使用ConnectController的項目的示例。即使如此,假設您有充分的理由編寫自己的連接控制器,但在執行Facebook實際重定向的getFacebookLoginPage()中沒有看到任何內容,所以我只能假設在未顯示的代碼中發生這種情況。然後,當重定向從Facebook返回時,我對爲什麼在調用exchangeForAccess()之前設置內容類型和大部分參數感到困惑。 (即使這樣,你正在設置看起來像請求標題的東西,但是你將它設置爲表單參數...沒有必要,但也不是你想要的。)

再次,我鼓勵你看看ConnectController(https://github.com/spring-projects/spring-social/blob/master/spring-social-web/src/main/java/org/springframework/social/connect/web/ConnectController.java)。它可能會做你需要它做的事情。即使您仍然覺得需要編寫自己的控制器,您可以看看ConnectController如何作爲如何編寫自己的控制器的指南。

+0

連接控制器是否可以用於所有的社交網站如臉譜,微博,tumblr和linkedIn等..? – 2014-12-09 05:08:38

+0

在這裏,我的社交控制器應該能夠發佈/閱讀操作與從iphone,android和Windows應用程序生成的訪問令牌,該應用程序使我的控制器處於休息狀態。請你能幫助我更好地配置我的社交控制器的方式。 – 2015-06-29 06:49:46