Quantcast
Viewing latest article 11
Browse Latest Browse All 145

Get Connection after singin.

UPDATE
Already solved.

---------------------------

I am starting with Spring Social, and now I am confused with something. I allways receive null when I tried to get Connection<Facebook> in my request Controller.

First, I have my own implementation of ConnectController.
Code:

@Controller("facebookController")
//@RequestMapping(value = "/social")
public class FacebookController extends ConnectController {

    private final static Log logger = LogFactory.getLog(FacebookController.class);
    private ConnectionRepository connectionRepository;

    @Autowired
    public FacebookController(ConnectionFactoryLocator connectionFactoryLocator,
            ConnectionRepository connectionRepository) {

        super(connectionFactoryLocator, connectionRepository);

        this.connectionRepository = connectionRepository;

    }

    @Override
    protected String connectedView(String providerId) {

        return "redirect:/connect/" + providerId + "/response";
    }

    @RequestMapping(value = "/facebook/response")
    public String serverPage(Model model, HttpServletRequest request) {

        String page = (String) request.getSession(false).getAttribute("page");

        if (page == null) {

            return "redirect:/connect/facebook/register";
        } else {

            request.getSession(false).removeAttribute("page");

            return "redirect:/user/sendMessage";
        }
    }

    @RequestMapping(value = "/facebook/register")
    public String showfacebookRegisterForm(Model model, HttpServletRequest request) {

        Connection<Facebook> connection = this.connectionRepository.getPrimaryConnection(Facebook.class);

        if (connection == null) {

            return "redirect:/connect/facebook";
        }

        Facebook fb = connection.getApi();

        model.addAttribute("nombre", fb.userOperations().getUserProfile().getName());
        model.addAttribute("apellidos", fb.userOperations().getUserProfile().getLastName());

        return "register";
    }
}

Here, in showfacebookRegisterForm, after login and resolve redirects from serverPage and connectedView I get Connection<Facebook> through ConnectionRepository.

But in other Controller i allways get null...
Code:

@Controller(value = "userWebController")
@RequestMapping("/user")
@PreAuthorize("hasRole('ROLE_USER')")
public class UserWebController {

    private static final Logger log = LoggerFactory.getLogger(UserWebController.class);
    @Autowired
    private UserService userService;
    @Autowired
    private ConnectionRepository connectionRepository;

    ...

    @RequestMapping(value = "/sendMessage", method = RequestMethod.GET)
    public String showSendMessage(HttpServletRequest request) throws IOException {

        return "user/sendMessage";
    }

    @RequestMapping(value = "/sendMessage", method = RequestMethod.POST)
    public String sendMessage(HttpServletRequest request) throws IOException {

        Connection<Facebook> connection = this.connectionRepository.findPrimaryConnection(Facebook.class);

        if (connection == null) {
       
            request.getSession(true).setAttribute("page", request.getRequestURI());
           
            return "redirect:/connect/facebook";
        }

        Facebook fb = connection.getApi();

        fb.feedOperations().updateStatus((String) request.getAttribute("msg"));

        return "user/sendMessage";
    }
}

My social config xml.
Code:

<bean id="connectionFactoryLocator"
          class="org.springframework.social.connect.support.ConnectionFactoryRegistry">
        <property name="connectionFactories">
            <list>
                <bean class="org.springframework.social.facebook.connect.FacebookConnectionFactory">
                    <constructor-arg value="${facebook.clientId}" />
                    <constructor-arg value="${facebook.clientSecret}" />
                </bean>
            </list>
        </property>
    </bean>
   
    <bean id="usersConnectionRepository"
          class="org.springframework.social.connect.jdbc.JdbcUsersConnectionRepository">
        <constructor-arg ref="miDataSource" />
        <constructor-arg ref="connectionFactoryLocator" />
        <constructor-arg ref="textEncryptor" />
    </bean>
   
    <bean id="connectionRepository" factory-method="createConnectionRepository"
          factory-bean="usersConnectionRepository" scope="request">
        <constructor-arg value="#{request.getRequestURI().split('/').length > 3 ? request.getRequestURI().split('/')[3] : 'guest'}" />
        <aop:scoped-proxy proxy-target-class="false" />
    </bean>
   
    <bean id="textEncryptor" class="org.springframework.security.crypto.encrypt.Encryptors"
          factory-method="noOpText" />

Thank you in advance.

Viewing latest article 11
Browse Latest Browse All 145

Trending Articles