当前位置: 首页 > 知识库问答 >
问题:

Spring Social Facebook URL在另一台服务器上重定向

金慈
2023-03-14

我是Spring Social API的新手,我正在尝试通过facebook登录我的应用程序,但它并没有将我重定向到我的域名URL。

我的应用程序运行在两台服务器上,它基于提交了ajax表单的restcontroller。一个是apache web服务器,另一个是tomcat服务器。

但不是我的facebook身份验证是基于restcontroller的,如果用户需要通过facebook ID登录,那么他只需点击登录facebook按钮和页面就可以成功重定向到facebook登录页面,而不是重定向回请求的URL。

我的代码如下:

@RequestMapping(value=“/fBauth”,method=RequestMethod.Get)public void fbredirect(@RequestParam Map requestParams)抛出不支持的DenCodingException{String accessToken=null;//String accessToken=null;//String accessToken=//“

        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:/";
}

请帮助我如何使用登录凭据重定向到apache web服务器。

提前道谢。瓦卡什

共有1个答案

黄俊智
2023-03-14

我解决了我的问题与更改重定向Url在我的web服务器(在我的情况下是nginx),我不知道这是最好的方式(甚至合适)或不!

 类似资料:
  • 问题内容: 我需要将Jenkins 2.32版从服务器A移至Jenkins 2.72.1服务器B。两台服务器均具有ubuntu 16.04.3,由于内存问题,我无法安装任何插件,也无法在服务器A中使用该插件。有什么办法可以实现这一目标? 问题答案: 将目录中的所有文件复制到新服务器。 将新服务器指向新目录。 将Jenkins war文件(或servlet容器设置,如果有的话)复制到新机器上并启动它

  • 我有一个关于ClientBootstrap的问题。下面是场景; null 正如您在错误行中看到的,我得到了这个异常:java.nio.channels.ClosedChannelException。我们不能在断开后使用相同的频道吗?。一旦断开,就完成了吗?。我们如何在SimpleChannelHandler中重新创建连接? 感谢进一步的评论:) <<<<<<新方法>>>>> 在SimpleChan

  • 我正在使用TestNG、Maven和Jenkins来运行我的代码(Java)。我需要在另一台服务器上运行我的测试,所以到目前为止,我所尝试的是在服务器上运行Jenkins作为服务并安排作业,但它产生了一个问题,即测试在后台运行(导致所有测试失败),我尝试配置此图片中的Jenkins服务:在此输入图像描述 但它不起作用,所以我试着运行Jenkins而不是作为服务,测试运行得很好,但我无法安排作业,因

  • 问题内容: 恐怕我已经知道问题的答案了,但是我还是会问: 当有两个MySQL DB服务器时,我可以访问存储在另一个服务器上的数据吗? 换句话说:我能以某种方式做到这一点: 答案真的和“否”一样短吗? 问题答案: 您可以在MySQL中设置联合表来完成您要执行的操作。有一些限制。 http://dev.mysql.com/doc/refman/en/federated-storage-engine.h

  • 我正在使用spring boot/Angular 6应用程序,我想将文件上载到服务器,我按照本教程上载了一个多部分文件:https://grokonez.com/spring-framework/spring-boot/angular-5-upload-get-multipartfile-to-from-spring-boot-server“。文件上载在应用程序的文件夹中,但现在我想使用URL将文

  • 问题内容: 我目前有一个在云实例上运行的实时Redis服务器,我想将此Redis服务器迁移到新的云实例并将该实例用作我的新Redis服务器。如果是MySQL,我将从旧服务器中导出数据库并将其导入新服务器中。我应该如何使用redis? PS:我不想设置复制。我想将Redis服务器完全迁移到新实例。 问题答案: 通过运行或从命令行将数据库快照保存到dump.rdb中。这将在与Redis服务器相同的文件