Java response.sendRedirect()在Twitter登录后不会重定向到回调

Java response.sendRedirect()在Twitter登录后不会重定向到回调,java,reactjs,spring,twitter4j,Java,Reactjs,Spring,Twitter4j,我创建了一个web应用程序,其中前端在React JS中,后端在Java Spring Boot中。在前端,我有一个带有event onClick的按钮,它在后端有fetch to/sign。(在后端)我有两个@GetMapping方法。第一是第二。当我在/signin方法响应中调试时,sendRedirect(url)不会将我重定向到回调函数-/callback。在twitter开发者帐户中,我设置了一个很好的回调url。另外,当我调试 使用mapping/signin的方法我没有获得twit

我创建了一个web应用程序,其中前端在React JS中,后端在Java Spring Boot中。在前端,我有一个带有event onClick的按钮,它在后端有fetch to/sign。(在后端)我有两个@GetMapping方法。第一是第二。当我在/signin方法响应中调试时,sendRedirect(url)不会将我重定向到回调函数-/callback。在twitter开发者帐户中,我设置了一个很好的回调url。另外,当我调试 使用mapping/signin的方法我没有获得twitter表单登录。我不知道为什么。有人能帮我吗

这是我的密码

后端

推特控制器

@RestController
public class TwitterController {

@GetMapping("/signin")
public void loginWithTwitter(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    ConfigurationBuilder cb = new ConfigurationBuilder();
    cb.setDebugEnabled(true)
            .setOAuthConsumerKey("xxxx")
            .setOAuthConsumerSecret("xxx");
    TwitterFactory tf = new TwitterFactory(cb.build());
    Twitter twitter = tf.getInstance();
    request.getSession().setAttribute("twitter", twitter);
    try {
        StringBuffer callbackURL = request.getRequestURL();
        int index = callbackURL.lastIndexOf("/");
        callbackURL.replace(index, callbackURL.length(), "").append("/callback");

        RequestToken requestToken = twitter.getOAuthRequestToken(callbackURL.toString());
        request.getSession().setAttribute("requestToken", requestToken);

        response.sendRedirect(requestToken.getAuthenticationURL());
    } catch (TwitterException e) {
        throw new ServletException(e);
    }
}

@GetMapping("/callback")
public void loginWithTwitterCallback(HttpServletRequest request, HttpServletResponse response) throws TwitterException, ServletException, IOException {
    Twitter twitter = (Twitter) request.getSession().getAttribute("twitter");

    RequestToken requestToken = (RequestToken) request.getSession().getAttribute("requestToken");
    String verifier = request.getParameter("oauth_verifier");

    AccessToken accessToken = twitter.getOAuthAccessToken(requestToken, verifier);
    request.getSession().removeAttribute("requestToken");

}
}
前端

LogIn.js

class LogIn extends React.Component {
constructor(props) {
    super(props);
    this.onTwitterClick = this.onTwitterClick.bind(this);
}

onTwitterClick() {
    fetch("/signin", {
        method: 'GET'
    }).then(response => response.json())
    .then(jsonData => {
        console.log(jsonData);
    });
}

render() {
    return(
        <div className="login-container">
            <div className="login-form-container form-container-shadow form-size">
                <div>
                    <button className="btn btn-primary" onClick={this.onTwitterClick}>
                        LOGIN WITH TWITTER
                    </button>
                </div>
            </div>
        </div>
    );
}
}

export default withTranslation('common')(LogIn);
类登录扩展了React.Component{
建造师(道具){
超级(道具);
this.onTwitterClick=this.onTwitterClick.bind(this);
}
onTwitterClick(){
获取(“/sign”{
方法:“获取”
}).then(response=>response.json())
.然后(jsonData=>{
console.log(jsonData);
});
}
render(){
返回(
使用TWITTER登录
);
}
}
导出默认值和翻译('common')(登录);

在不使用前端的情况下尝试此操作。只需点击浏览器,看看是否会调用回调方法。将logging.level.org.springframework=debug放在application.properties中可能会有帮助,这样您就可以准确地看到后端发生了什么。如果问题是React应用程序,您可能会被CORS策略阻止。您是从Spring Boot应用程序还是单独的服务器提供React应用程序?@NazaretK。我将localhost:8080/signin放在浏览器中,并调用了回调方法。首先调试器进入/signin方法,将我重定向到tweeter表单登录,我登录并被重定向到回调函数,在那个里我获得了访问令牌。我认为我的React JS应用程序有问题。。我在不同的本地主机上提供后端和前端服务。用于弹簧8080和react 3000。所以一切都正常,但为什么我不能从前端开始呢?为什么这不起作用?那肯定是CORS的问题。现在无法提供更多详细信息,但将返回给您。如果我将使window.location.href=''而不是在事件中获取,请单击一切正常,但在回调和接收访问令牌后,我不知道如何再次重定向用户以对localhost:3000/dashboard上的应用程序作出反应