【问题标题】:share with facebook using Spring-Social and Spring Security使用 Spring-Social 和 Spring Security 与 facebook 共享
【发布时间】:2015-03-24 19:04:55
【问题描述】:

我已将社交登录按钮 [Facebook] 与我的 Web 应用程序集成。使用 spring-social 和 spring security 可以正常工作。

在我的 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>

现在我的注册控制器是:当用户第一次尝试从 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 表中。

对于后续登录,我还在我的WebRequest 中获得更新的connection

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

为此,我的控制器是:

@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 对象中, 如何使用此连接对象进行任何操作,请帮助

【问题讨论】:

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


    【解决方案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..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-01
      • 2014-03-01
      • 2012-09-08
      • 2012-01-24
      • 2013-06-13
      • 2016-02-13
      • 2016-04-19
      • 2015-03-26
      相关资源
      最近更新 更多