2012-06-21 3 views
0

Привет, все ребята, я делаю все как в учебнике. Но я остановился на получении access_Token. Так что это мой код, который перенаправляется на facebook.Spring-social get access_token

@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 

если я нарезал "#" и вставлял "?" там все будет хорошо

так что это мой контроллер, где я получаю этот url.

@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")); 
*/  
    } 
} 
+0

Итак, в чем ваш вопрос? – maksimov

+0

Я думаю, он ищет, как получить доступ к access_token в 'FacebookController'. –

+0

Да, точно! потому что я не могу получить access_token с такого URL с помощью «#». Он не видит access_token как параметр. Я хочу спросить, есть ли проблема в контроллерах или, возможно, в некоторых конфигурациях. –

ответ

2

Extract маркер доступа с помощью URI fragment Javascript.

Смотрите документацию для client side flow:

Если пользователь выбирает авторизовать приложение, пользователь будет перенаправлены:

YOUR_REDIRECT_URI # access_token = USER_ACCESS_TOKEN & expires_in = NUMBER_OF_SECONDS_UNTIL_TOKEN_EXPIRES

Обратите внимание, что в отличие от потока сервера токен доступа передается вашему redirect_uri в фрагмент URL-адреса и поэтому доступен только для вашей заявки через Javascript.

+0

ЧТО !!!! Кто это придумал ?! И почему это так работает? –

+0

Возможно, вам стоит рассмотреть поток на стороне сервера. – opyate

+0

? Я ничего не могу получить после #. # -пробейте меня даже в JAVA = (... я очень люблю @FacebookAccesToken аннотацию. Кто-нибудь в этом приветствует? –