0

我有我的后端(春季启动)应用程序上http://localhost:8080ReactJS +弹簧社会(脸谱)+重定向回验证

运行我有我的前端后反应(反应JS)上http://localhost:3000

运行的应用程序我前端SignIn按钮通过后台应用程序与oauth舞蹈的Facebook进行认证(http://localhost:8080/connect/facebook)。这是通过spring-social插件免费提供的。

成功进行身份验证后,我将facebookConnected.html重定向到http://localhost:8080/handle-successful-authentication,这是我的后端应用程序中用于处理验证后逻辑的端点。

一旦我处理了这个问题,我该如何将控制权交还给我的前端?

+0

前端永远不会将控制权交给后端。后端永远不需要手动控制。前端向后端发出请求:它仍然在控制之中,它可以继续工作,或者可以选择等到后端完成构建并发送响应。一旦您的后端控制器返回,这是您的后端交互的结束。 –

+0

你是如何解决它的? – kevcodez

+0

@kevcodez我添加了一个自定义控制器来覆盖重定向调用,如本文中所建议的:http://www.littlebigextra.com/how-to-change-the-default-spring-social-redirect-flow/。 – alphathesis

回答

0

也许你应该检查referer头文件提交,看看它是否能满足你的需求:成功登录过程后使用它重定向回来。检查this answer使用SimpleUrlAuthenticationSuccessHandler

@Bean 
public AuthenticationSuccessHandler successHandler() { 
SimpleUrlAuthenticationSuccessHandler handler = new SimpleUrlAuthenticationSuccessHandler(); 
    handler.setUseReferer(true); 
    return handler; 
} 

或者,如果你在手动配置春季多件 - 您可以使用this answer 用于获取引用者URL过滤器相并将其保存在会话中。 一个修饰,其答案可能是:延长OAuth2ClientAuthenticationProcessingFilter和的doFilter得到引荐值

public class MyOAuth2ClientAuthenticationProcessingFilter extends OAuth2ClientAuthenticationProcessingFilter { 
... 
@Override 
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) 
     throws IOException, ServletException { 
    HttpServletRequest request = (HttpServletRequest) req; 
    String referrer = request.getHeader("Referer");   
    if (null != referrer) 
     request.getSession().setAttribute("url_prior_login", referrer); 

    super.doFilter(req, res, chain); 
    } 
} 

这样你就可以处理。第您的“...处理成功的认证”后重定向 - 但我看到这个重定向是开销,尽量把这种逻辑在其他地方

successHandler()看起来是这样的(如successHandler()或pricipalExtractor()在UserInfoTokenServices如果你需要从社会的OAuth提供更多用户详细信息。):

@Bean 
public AuthenticationSuccessHandler successHandler() { 
    AuthenticationSuccessHandler rst = new AuthenticationSuccessHandler() { 
    @Override 
    public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, 
       Authentication authentication) throws IOException, ServletException { 
      ... 
      HttpSession session = request.getSession(); 
      String redirectUrl = null; 
      if (session != null) { 
       redirectUrl = (String) session 
         .getAttribute("url_prior_login"); 

      if (null == redirectUrl || redirectUrl.trim().length() <= 0) 
       redirectUrl = "http://your_default_redirect_url"; 

      response.sendRedirect(redirectUrl); 
     }; 
     return rst; 
} 

无论如何,支票弹簧docs