使用Spring-Social和Spring Security与facebook分享

时间:2015-01-26 11:05:05

标签: facebook-graph-api spring-security spring-social spring-social-facebook

我已将社交登录按钮[Facebook]与我的网络应用程序集成。它使用弹簧社交和弹簧安全工作正常。

在我的login.jsp中,我有:

<!-- Add Facebook sign in button -->
<a href="${pageContext.request.contextPath}/auth/facebook"><button class="btn btn-facebook"><i class="icon-facebook"></i>facebook</button></a>

现在我的registrion控制器是:当用户第一次尝试从Facebook登录并在我的数据库中注册用户时,这是我从facebook收到回调的地方。

@RequestMapping(value = "/user/register", method = RequestMethod.GET)
    public String showRegistrationForm(WebRequest request, Model model) 
    {
        LOGGER.debug("Rendering registration page.");
        @SuppressWarnings("deprecation")
        Connection<?> connection = ProviderSignInUtils.getConnection(request);
        RegistrationForm registration = createRegistrationDTO(connection);
        LOGGER.debug("Rendering registration form with information: {}", registration);
        model.addAttribute(MODEL_NAME_REGISTRATION_DTO, registration);
        return VIEW_NAME_REGISTRATION_PAGE;
    }

用户也被保存在UserConnection表格中。

对于后续登录,我在connection

中收到了更新后的WebRequest

现在,我想为使用shareWithFacebook按钮登录我的应用程序的用户创建signwithfacebook操作。

为此我的控制器是:

@RequestMapping(method = RequestMethod.GET)
public String shareWithFacebook(WebRequest request){
  Map<String, String[]> params = request.getParameterMap();
  String[] head = request.getAttributeNames(WebRequest.SCOPE_REQUEST);
  String[] head1 = request.getAttributeNames(WebRequest.SCOPE_SESSION);
  return null;
}

现在,当我在调试模式下运行此控制器时,我可以看到Connection对象存在于此控制器中的WebRequest对象中, 我如何使用此连接对象进行任何操作,请帮助

1 个答案:

答案 0 :(得分:1)

stackoverflow没有帮助:但实际上我得到了解决方案,可能会帮助其他人,因此发布相同的内容:

在您的social-xml配置中添加此内容以初始化FacebookApiHelper  

<bean id="facebookApiHelper" class="org.springframework.social.facebook.config.support.FacebookApiHelper">
    <constructor-arg index="0" ref="usersConnectionRepository"/>
    <constructor-arg index="1" ref="userIdSource"/>
</bean>

然后在你的控制器中使用相同的方法来处理与facebook的现有连接对象。

@Controller
@RequestMapping("/facebook")
public class FacebookOperationController {

    private static final Logger logger = LoggerFactory.getLogger(FacebookOperationController.class);

    @Autowired
    protected FacebookApiHelper facebookApiHelper;

    @Autowired
    UserIdSource userIdSource;

    private UsersConnectionRepository usersConnectionRepository;

    @Autowired
    public FacebookOperationController(UsersConnectionRepository usersConnectionRepository)
    {
        this.usersConnectionRepository = usersConnectionRepository;
    }

    @RequestMapping(method = RequestMethod.GET)
    public String shareWithFacebook(WebRequest request,Model model){

        Facebook facebook = facebookApiHelper.getApi();
        Connection<Facebook> connection = usersConnectionRepository.createConnectionRepository(userIdSource.getUserId()).findPrimaryConnection(Facebook.class);
        return "tilesname";
    }
}

现在我们有了connectionfacebook,欢迎所有的api ..