Я занимаюсь разработкой приложения для Twitter, для которого использую Spring Boot 2.2.2. Я следую инструкциям здесь https://careydevelopment.us/2017/05/24/implement-twitter-login-solution-spring-boot/.
Я только что изменил свой код, чтобы он был больше ориентирован на REST вместо RedirectView (как сделано в приведенной выше ссылке)
@PostMapping("/getToken")
public ResponseEntity<TwitterTokenResponse> getToken(HttpServletRequest request) throws Exception {
Twitter twitter = getTwitter();
String callbackUrl = "http://localhost:3000/settings";
RequestToken requestToken = twitter.getOAuthRequestToken(callbackUrl);
request.getSession().setAttribute("requestToken", requestToken);
*//setting twitter attribute in session*
request.getSession().setAttribute("twitter", twitter);
String twitterUrl = requestToken.getAuthorizationURL();
TwitterTokenResponse twitterTokenResponse = new TwitterTokenResponse(requestToken.getToken(), requestToken.getTokenSecret(), true, 0L, null);
log.info("Authorization url is " + twitterUrl);
log.info("Request token is " + requestToken);
return ResponseEntity.ok(twitterTokenResponse);
}
@PostMapping("/twitterCallback")
public ResponseEntity<TwitterTokenResponse> twitterCallback(@RequestParam(value = "oauth_verifier", required = false) String oauthVerifier, @RequestParam(value = "denied", required = false) String denied, HttpServletRequest request) throws Exception {
if (denied != null) {
log.error("Could not get token from Twitter! Access denied");
return null;
}
*//Getting twitter attribute back from session but it is null*
Twitter twitter = (Twitter) request.getSession().getAttribute("twitter");
RequestToken requestToken = (RequestToken) request.getSession().getAttribute("requestToken");
AccessToken token = twitter.getOAuthAccessToken(requestToken, oauthVerifier);
request.getSession().removeAttribute("requestToken");
TwitterTokenResponse twitterTokenResponse = new TwitterTokenResponse(token.getToken(), token.getTokenSecret(), true, token.getUserId(), token.getScreenName());
log.info("Access token is " + token);
return ResponseEntity.ok(twitterTokenResponse);
}
Как видно из метода getToken (), я устанавливаю переменную twitter в сеансе и пытаюсь получить ту же переменную из сеанса в методе twitterCallback (). атрибут twitter, который я получаю из сессии, всегда равен нулю. Любые причины, почему это так и что можно сделать, чтобы решить эту проблему?
Спасибо