2014-12-24 1 views
5

Я пробовал это Spring Social Accessing Twitter Data guide. И хотя я двойной, тройной настолько дальше проверил все, что я постоянно получаю эту ошибку, когда я нажимаю «Подключение к Twitter» кнопки:Продолжайте получать 401 (требуется авторизация) с весенним социальным твиттером

POST request for "https://api.twitter.com/oauth/request_token" resulted in 401 (Authorization Required); invoking error handler

Вот мой код:

src/main/resources/templates/connect/twitterConnect.html

<html> 
<head> 
    <title>Hello Twitter</title> 
</head> 
<body> 
    <h3>Connect to Twitter</h3> 

    <form action="/connect/twitter" method="POST"> 
     <div class="formInfo"> 
      <p>You aren't connected to Twitter yet. Click the button to connect this application with your Twitter account.</p> 
     </div> 
     <p><button type="submit">Connect to Twitter</button></p> 
    </form> 
</body> 

src/main/resources/templates/connect/twitterConnected.html

<html> 
<head> 
    <title>Hello Twitter</title> 
</head> 
<body> 
    <h3>Connected to Twitter</h3> 

    <p> 
     You are now connected to your Twitter account. 
     Click <a href="/">here</a> to see your Twitter friends. 
    </p> 
</body> 

src/main/resources/templates/hello.html

<html> 
<head> 
    <title>Hello Twitter</title> 
</head> 
<body> 
    <h3>Hello, <span th:text="${twitterProfile.name}">Some User</span>!</h3> 

    <h4>These are your friends:</h4> 

    <ul> 
     <li th:each="friend:${friends}" th:text="${friend.name}">Friend</li> 
    </ul> 
</body> 

src/main/java/hello/HelloController.java

@Controller 
@RequestMapping("/") 
public class HelloController { 

private Twitter twitter; 

private ConnectionRepository connectionRepository; 

@Inject 
public HelloController(Twitter twitter, ConnectionRepository connectionRepository) { 
    this.twitter = twitter; 
    this.connectionRepository = connectionRepository; 
} 

@RequestMapping(method=RequestMethod.GET) 
public String helloTwitter(Model model) { 
    if (connectionRepository.findPrimaryConnection(Twitter.class) == null) { 
     return "redirect:/connect/twitter"; 
    } 

    model.addAttribute(twitter.userOperations().getUserProfile()); 
    CursoredList<TwitterProfile> friends = twitter.friendOperations().getFriends(); 
    model.addAttribute("friends", friends); 
    return "hello"; 
} 

} 

src/main/java/hello/Application.java

@Configuration 
    @EnableAutoConfiguration 
    @ComponentScan 
    public class Application { 

    /* 
    * SPRING BOOTSTRAP MAIN 
    */ 
    public static void main(String[] args) { 
     SpringApplication.run(Application.class, args); 
    } 

    } 

ответ

16

Я столкнулся с той же проблемой.

После некоторого расследования выяснилось, что проблема связана с URL-адресом обратного вызова. Spring social устанавливает это на yourap/signin/twitter. Для facebook и linkedin это прекрасно, но по какой-то причине twitter nees заполняет URL-адрес обратного вызова в настройках приложения.

Итак, решение: зайдите в настройки вашего приложения Twitter и заполните URL-адрес обратного вызова (это даже не должно быть фактическим URL-адресом обратного вызова, который вы собираетесь использовать, просто заполните любой URL-адрес!). Скорее всего, это причина ваших проблем.

+0

thx! все работает отлично! – Skeeve

1

Как выглядит ваш файл application.properties? Он должен иметь записи для spring.social.twitter.appId и spring.social.twitter.appSecret, заполненные значениями, которые вы получаете при регистрации своего приложения в Twitter.

Убедитесь, что у вас есть параметры application.properties и нет фигурных скобок вокруг значений (текст руководства показывает фигурные скобки, но они предназначены как заполнители, а не то, что вы действительно должны иметь в приложении. свойства).

+0

Да, с этим все в порядке – Skeeve