2014-12-24 8 views
5

Ich habe dies versucht Spring Social Accessing Twitter Data guide. Und obwohl ich doppelt habe, Dreier- eine so überprüft auf alles, was ich erhalte diese Störung, wenn ich auf "Connect to Twitter" Button:Halten Sie 401 (Autorisierung erforderlich) mit Frühling Social Twitter

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

Hier ist mein Code:

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); 
    } 

    } 

Antwort

16

Ich lief auf das gleiche Problem.

Nach einiger Untersuchung fand ich heraus, dass das Problem in der Rückruf-URL ist. Spring social setzt dies auf yourap/signin/twitter. Für Facebook und LinkedIn ist das in Ordnung, aber aus irgendeinem Grund benötigt Twitter auch in den Programmeinstellungen eine Callback-URL.

Also die Lösung: Gehen Sie zu Ihren Twitter-Einstellungen und füllen Sie eine Callback-URL (das muss nicht einmal die Callback-URL sein, die Sie verwenden wollen, füllen Sie einfach eine beliebige URL aus!). Wahrscheinlich ist dies die Ursache für Ihre Probleme.

+0

thx! Alles funktioniert gut! – Skeeve

1

Wie sieht Ihre Datei "application.properties" aus? Es sollte Einträge für spring.social.twitter.appId und spring.social.twitter.appSecret enthalten, die mit Werten gefüllt sind, die Sie erhalten, wenn Sie Ihre Anwendung bei Twitter registrieren.

Stellen Sie sicher, dass Sie diese in application.properties haben und dass keine geschweiften Klammern um die Werte vorhanden sind (der Text des Guides zeigt geschweifte Klammern, aber diese sind als Platzhalter gedacht, nicht etwas, das Sie eigentlich in der Anwendung haben sollten). Eigenschaften).

+0

Ja, alles ist in Ordnung mit diesem – Skeeve