Puedo usar Spring MVC y Spring Security para mi proyecto.. Esta utilizando mis propios datos de usuario para la autenticación. Pero ahora estoy tratando de integrar con Facebook. he creado una aplicación en Facebook significa que tengo la ID de Cliente y el cliente Secreto.. yo también he leído algunas de las preguntas en los documentos, pero todavía atrapados…

puedo crear un controlador para el inicio de Sesión con Facebook :

import java.util.List;

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/login/")
public class LoginController {

    String fb_app_id="my_client_id";
    String redirect_url="localhost:8888";
    String state="public_profile,email,user_friends";
    String key="my_client_secret";

    @RequestMapping("/facebook")
    public String login( ModelMap model) {

        String url="https://www.facebook.com/dialog/oauth/?"
                   + "client_id=" + fb_app_id
                   + "&redirect_uri=" + redirect_url
                   + "&scope=email,publish_stream,user_about_me,friends_about_me"
                   + "&state=" + key
                   + "&display=page"
                   + "&response_type=code";
        return "redirect:"+url;

    }

}

creo que funciona porque cuando le doy a conectar, me puede mostrar mi nombre con Javascript a continuación:

function testAPI() {
  console.log('Welcome!  Fetching your information.... ');
  FB.api('/me', function(response) {
    console.log('Good to see you, ' + response.name + '.');
    document.getElementById('status').innerHTML = 'Good to see you, ' +
      response.name;
  });
}

Pero todavía me confunden cómo integrarla con Spring Security. Si alguien tiene ejemplos agradezco…

Este es mi spring-security.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
    xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
           http://www.springframework.org/schema/security
           http://www.springframework.org/schema/security/spring-security-3.1.xsd">

    <http pattern="/common/*" security="none" />

    <http auto-config="true">
        <intercept-url pattern="/maintenance/*" access="ROLE_USER" />
        <intercept-url pattern="/_ah/*" access="ROLE_USER" />
        <intercept-url pattern="/predict/*" access="ROLE_USER" />

        <form-login login-page='/' default-target-url='/predict/list'
            login-processing-url="/login_check" authentication-failure-url="/index?login_error=2"
            always-use-default-target="true" />
        <logout logout-url="/logout" logout-success-url="/index" />
    <!--    <custom-filter ref="socialAuthenticationFilter" before="PRE_AUTH_FILTER" /> -->
    <!--    <custom-filter before="FORM_LOGIN_FILTER"
            ref="facebookAuthenticationFilter" /> -->
    </http>

    <authentication-manager>
        <authentication-provider ref="gaeAuthenticationProvider" />
    <!--    <authentication-provider ref="authenticationProviderFacebook"> 
        </authentication-provider>-->
    </authentication-manager>

    <beans:bean id="gaeAuthenticationProvider"
        class="com.games.predictor.security.AuthenticationProvider" />

</beans:beans>  

yo tengo mi propia clase para Autenticar a userdata con JPA…

package com.games.predictor.security;
import java.util.List;
import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationProvider;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import com.games.predictor.UserDAO;
public class AuthenticationProvider extends AbstractUserDetailsAuthenticationProvider
{
//private SecurityDao securityDao; 
@Override
protected UserDetails retrieveUser(String username,
UsernamePasswordAuthenticationToken authentication)
throws AuthenticationException
{
final String password = authentication.getCredentials().toString();
System.out.println(username+"===="+password);
//This line for validating user with database
boolean isValidUser = UserDAO.INSTANCE.isValidUser(username, password);
if (isValidUser)
{
final List<SimpleGrantedAuthority> authorities = UserDAO.INSTANCE.getAuthoritiesByUser(username);
//User u=new User(username,password,);
return new User(username, password, true, true, true, true, authorities);
}
else
{
authentication.setAuthenticated(false);
throw new BadCredentialsException("Username/Password does not match for " 
+ authentication.getPrincipal());
}
}
@Override
protected void additionalAuthenticationChecks(UserDetails arg0,
UsernamePasswordAuthenticationToken arg1)
throws AuthenticationException {
//TODO Auto-generated method stub
}
}

Hice algunas investigaciones en los últimos días, pero todavía atascado.

Mi Proyecto de Pila : Java, Spring MVC, Spring Security, Google App Engine, Google Almacén de Datos, JPA. (Primavera Núcleo Social y la Primavera Sociales Facebook Agregado)

2 Comentarios

  1. 2

    Daniel podría por favor elaborar dónde estás pegado. He utilizado la misma pila para la integración de facebook de inicio de sesión. Pero yo no uso la Primavera Sociales. Creo que no es necesario.

    Pasos para integrar facebook login con el inicio de sesión existente.

    1. Utilizar el facebook javascript plugin en tu jsp para facebook de inicio de sesión.
    2. Una vez que el usuario apruebe su aplicación. OAuth genera un auth token, el uso que buscar el id de correo electrónico del cliente utilizando el gráfico de la API.
    3. Enviar el id de correo electrónico al servidor mediante Ajax.
    4. Comparar el id de correo electrónico enviado a el lado del servidor con el id de correo electrónico en la base de datos.
    5. Si el id de correo electrónico es la misma de inicio de sesión del usuario.

    Token de autenticación es temporal así que me parece inútil el envío es para el lado del servidor o de guardar en la db. Se guarda localmente en el lado del cliente. Y el fb javascript plugin se encarga de ello. De esta manera se ahorra la molestia de aplicación de spring social facebook.

    Veo que está utilizando el controlador de facebook de inicio de sesión, no es necesario, confía en mí, usar el fb javascript plugin es muy simple & fácil.

    • Hola, Gracias por tu respuesta.. Mi problema es a la hora de integrar Facebook Login con Spring Security Sesión. Veo que algunas personas lo usan con la primavera sociales y spring security. Pero tengo un problema al intentar poner en práctica uno de los que muestra.
    • Underdog se pierde esta-usted no debe recuperar su id de correo electrónico del cliente que se ha generado en el lado del cliente, ya que podría ser fácilmente modificado por algunas de correo electrónico de otros y por lo tanto la persona que no deben de entrada puede conseguir la entrada. Una vez auth token de usuario es devuelto, se debe enviar el token para el lado del servidor, donde usted necesita para comprobar que este token es todavía el token que se ha generado , como establecimiento recomendado por facebook aquí developers.facebook.com/docs/facebook-login/login-flow-for-web/… . Una vez que confirme esto, se puede acceder a este facebook del usuario como uno de sus usuarios que el usuario existe.

Dejar respuesta

Please enter your comment!
Please enter your name here