2016-07-12 2 views
0

저는 스프링 소셜 API에 대해 새로운 데, 페이스 북으로 내 애플리케이션에 로그인하려하지만 내 도메인 URL로 리디렉션하지 않습니다.스프링 소셜 페이스 북의 URL 다른 서버로 리다이렉트

내 애플리케이션은 Ajax 양식이 제출 된 restcontroller를 기반으로하는 두 개의 서버에서 실행됩니다. 하나는 아파치 웹 서버이고 다른 하나는 tomcat 서버입니다.

내 페이스 북 인증은 restcontroller를 기반으로하지 않습니다. 사용자가 페이스 북 ID로 로그인해야하는 경우 페이스 북 버튼으로 로그인을 클릭하면 페이 스북 로그인 페이지로 리디렉션되지만 요청 된 페이지로 다시 리디렉션되지 않습니다. URL.

내 코드는 아래로 : 페이스 북

@RequestMapping와

로그인 (값 = "/ fbauth"방법 = RequestMethod.GET) 공공 무효 fbredirect (@RequestParam지도 requestParams) { (자), UnsupportedEncodingException가 발생합니다 String accessToken = null; // 문자열 accessToken = // "CAAFv5tfCxvsBAMkGz7Mz63ESCLEK3jgZBEZAZBqlj3CApIyqmvA5hOrtl9Ln05O3BRTcx95TjT9IxZBfRz3fKZBjNJ74qko1SFjjzAXmdDnzVePmGXswOM8NHEGTZA6aub7bnZBYBIMO2ZBXX2gpo6ky7Dkqu2xZBUymAalAgg3ixaRQMe3e3w1ruUtVeyQrtMb3x0pehHOIaTQZDZD"; RestTemplate restTemplate = new RestTemplate(); 지도 결과 = null; if (StringUtils.isEmpty (accessToken)) { for (String key : requestParams.keySet()) { Object value = requestParams.get (key); logger.info ("키 :"+ 키 + "값 :"+ 값); }

 String code = requestParams.get("code"); 
     if (StringUtils.isNotEmpty(code)) { 
      String authUrl = "http://" + request.getServerName() + "/realtybud/fbauth"; 
      StringBuilder stringBuilder = new StringBuilder(); 
      String fbAuthApi = "https://graph.facebook.com/v2.3/oauth/access_token?client_id="; 
      stringBuilder.append(fbAuthApi); 
      stringBuilder.append(selectAppId()); 
      stringBuilder.append("&redirect_uri="); 
      stringBuilder.append(authUrl); 
      stringBuilder.append("&client_secret="); 
      stringBuilder.append(selectAppSecret()); 
      stringBuilder.append("&code="); 
      stringBuilder.append(code); 
      String fbGraphUrl = stringBuilder.toString(); 

      result = restTemplate.getForObject(fbGraphUrl, Map.class); 
      accessToken = result.get("access_token"); 
      logger.info("Access Token: " + accessToken); 
     } 
    } 

    StringBuilder stringBuilder = new StringBuilder(); 
    String fbGraphApi = "https://graph.facebook.com/v2.3/me?fields=id,name,email&access_token="; 
    stringBuilder.append(fbGraphApi); 
    stringBuilder.append(accessToken); 
    String fbProfileInfo = stringBuilder.toString(); 
    // String info = restTemplate.getForObject(fbProfileInfo, String.class); 
    // logger.info("Info: " + info); 
    Map<String, String> info = restTemplate.getForObject(fbProfileInfo, Map.class); 
    logger.info("Id: " + info.get("id") + " name: " + info.get("name") + " email: " + info.get("email")); 
    String email = info.get("email"); 
    if (StringUtils.isNotEmpty(email)) { 
     User user = userService.findUserByEmail(email); 
     if (user == null) { 
      user = new User(); 
      user.setEmail(email); 
      user.setFacebookAccessToken(accessToken); 
      user.setFacebookName(info.get("name")); 
      userService.userSave(user); 

      Role userRole = new Role(); 
      userRole.setRoleName("ROLE_USER"); 
      userRole.setUser(user); 
      userService.roleSave(userRole); 

      List<Role> roles = new ArrayList<Role>(); 
      roles.add(userRole); 
      user.setRoles(roles); 
     } else { 
      user.setFacebookAccessToken(accessToken); 
      user.setFacebookName(info.get("name")); 
      userService.userSave(user); 
     } 

     SecurityUser secUser = new SecurityUser(user); 
     Authentication authentication = new UsernamePasswordAuthenticationToken(secUser, secUser.getPassword(), 
       secUser.getAuthorities()); 
     SecurityContextHolder.getContext().setAuthentication(authentication); 

    } else { 
     // error 
    } 

    // String fbAuthSuccessUrl = "/index?fbAuth=success"; 
    //return "redirect:/"; 
} 

어떻게 로그인 자격 증명으로 아파치 웹 서버로 리디렉션 할 수 있습니까?

미리 감사드립니다. Waqas

+0

내 질문에 언급하지 않은 한 가지 더. 양식이 아파치 웹 서버에서 Tomcat 서버로 요청을 전송할 때, 나는 아파치 웹 서버 도메인 URL로 돌아갈 필요가있다. 나는 site url을 가진 developer.facebook 앱에 도메인 URL을 설정했다. –

답변

0

내 웹 서버 (내 경우 nginx)에서 리디렉션 URL을 변경하면 내 문제가 해결되었지만 이것이 최선의 방법인지 알지 못합니다.

+0

변경 한 리디렉션 URL은 무엇입니까? request.getServerName()을 시도했지만 성공하지 못했습니다. 봄 컨트롤러에서 우리가 요청한 URL을 찾고 해당 URL로 다시 리디렉션하는 방법이 있습니까? –

+0

제 경우에는 ngnix가 redirect URL을 localhost로 변경했습니다 (이는 Tomcat과 소셜 서버 사이의 프록시이기 때문에). 그래서 난 내 자신의 서버 URL에 모든 나가는 요청에 리디렉션 URL을 설정하려면 nginx을 강제로. @WaqasBaig –

관련 문제