Spring-social获取access_token

时间:2012-06-21 10:09:59

标签: java facebook spring-social

嗨2我所有人都喜欢在教程中。但我已经停止获取access_Token。所以这是我重定向到Facebook的代码。

@RequestMapping(method = RequestMethod.GET)
public void process(/*
                     * @ModelAttribute("user") User user, BindingResult
                     * result Model model,
                     */HttpServletRequest request, HttpServletResponse response) {
    FacebookConnectionFactory connectionFactory = new FacebookConnectionFactory("240362226072898", "657532dea6d091ab44a56668c47cca15");
    OAuth2Operations oauthOperations = connectionFactory.getOAuthOperations();
    OAuth2Parameters params = new OAuth2Parameters("http://localhost:8080/shop/facebook");
    String authorizeUrl = oauthOperations.buildAuthorizeUrl(GrantType.IMPLICIT_GRANT, params);

    try {
        response.sendRedirect(authorizeUrl);
        LOG.error("ALL WORKING FINE>>>");
    } catch (IOException e) {
        LOG.error("Errorrrrr" + e);
    }

之后在其他控制器中。映射在/ facebook上我收到了一个URL,但是我找不到任何参数,因为在URL的末尾我看到了#。像

http://localhost:8080/shop/facebook#access_token=.......&expires_in=6277

如果我剪“#”并粘贴“?”一切都会好的

所以这是我的控制器,我收到这个网址。

@Controller
@RequestMapping(value = "/facebook")
public class FacebookController {
    private static final Logger LOG = Logger.getLogger(FacebookController.class);

    @RequestMapping(method = RequestMethod.GET) 
    public void getAuthorisation(@RequestParam String access_token, HttpServletResponse response, HttpServletRequest request) {

        LOG.error("Access token"+access_token);
/*      LOG.error(request.getAttribute("access_token"));
        LOG.error(request.getParameter("access_token"));
*/      
    }
}

1 个答案:

答案 0 :(得分:2)

使用Javascript从URI fragment提取访问令牌。

请参阅client side flow的文档:

  

如果用户选择授权您的应用程序,则该用户将是   重定向到:

     

YOUR_REDIRECT_URI#access_token = USER_ACCESS_TOKEN& expires_in = NUM​​BER_OF_SECONDS_UNTIL_TOKEN_EXPIRES

     

请注意,不像   服务器端流,访问令牌传递给你的redirect_uri   url片段等只适用于您的应用程序   的JavaScript。