2014-12-24 12 views
5

Ho provato questo Spring Social Accessing Twitter Data guide. E anche se ho doppie, triple uno così via controllato tutto continuo a ricevere questo errore quando faccio clic su "Connetti a Twitter" pulsante:Continua a ricevere 401 (Autorizzazione necessaria) con Twitter social primavera

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

Ecco il mio codice:

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

    } 

risposta

16

Mi sono imbattuto nello stesso problema.

Dopo alcune indagini ho scoperto che il problema è nell'URL di richiamata. Spring social imposta questo a yourap/signin/twitter. Per facebook e linkedin questo va bene, ma per qualche ragione twitter ha anche un URL di callback compilato nelle impostazioni dell'applicazione.

Quindi la soluzione: vai alle impostazioni dell'applicazione twitter, e inserisci un url di richiamata (questo non deve nemmeno essere l'url effettivo di callback che stai per usare, basta inserire un url!). Molto probabilmente questa è la causa dei tuoi problemi.

+0

thx! tutto funziona bene! – Skeeve

1

Che aspetto ha il file application.properties? Dovrebbe avere voci per spring.social.twitter.appId e spring.social.twitter.appSecret, popolate con i valori che ottieni quando registri la tua applicazione con Twitter.

Assicurarsi di avere quelli in application.properties e che non ci siano parentesi graffe attorno ai valori (il testo della guida mostra parentesi graffe, ma sono da intendersi come segnaposti, non qualcosa che si dovrebbe effettivamente avere nell'applicazione. proprietà).

+0

Sì, è tutto a posto con questo – Skeeve