SocialAuth – Login su Facebook con JAVA e JSF

SocialAuth è un framework che permette di interagire con i vari social (Facebook, Twitter, etc) tramite Java.
Vediamo la login.

CREAZIONE APP FACEBOOK
Andare sulla console sviluppatori di facebook, apparirà la seguente schermata:

Nel campo site URL inserire l’indirizzo “http://localhost:8080”, per testare in locale la login.

BEAN
Per creare la connessione verranno usati l’AppId e l’AppSecret, indicati nelle basic info della nostra app su facebook.

package com;

import java.util.Properties;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;

import org.brickred.socialauth.Profile;
import org.brickred.socialauth.SocialAuthConfig;
import org.brickred.socialauth.SocialAuthManager;
import org.brickred.socialauth.exception.SocialAuthException;
import org.springframework.stereotype.Component;

@Component
@ManagedBean
@SessionScoped
public class FacebookBean {
private String FACEBOOK_APP_ID = "...............";
private String FACEBOOK_APP_SECRET = ".................";
private SocialAuthManager manager;
private String originalURL;
private String providerID;
private Profile profile;

public void socialConnect() throws Exception {
// Put your keys and secrets from the providers here
Properties props = System.getProperties();
props.put("graph.facebook.com.consumer_key", FACEBOOK_APP_ID);
props.put("graph.facebook.com.consumer_secret", FACEBOOK_APP_SECRET);
// Define your custom permission if needed
props.put("graph.facebook.com.custom_permissions", "publish_stream,email,user_birthday,user_location,offline_access");
// Initiate required components
SocialAuthConfig config = SocialAuthConfig.getDefault();
config.load(props);
manager = new SocialAuthManager();
manager.setSocialAuthConfig(config);
// 'successURL' is the page you'll be redirected to on successful login
ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
// String successURL = externalContext.getRequestContextPath() + "socialLoginSuccess.xhtml";
String successURL = "http://localhost:8080/"+ externalContext.getRequestContextPath()+"/socialLoginSuccess.xhtml";
System.out.println("successURL:" + successURL);
String authenticationURL = manager.getAuthenticationUrl("facebook", successURL);
FacesContext.getCurrentInstance().getExternalContext().redirect(authenticationURL);
}

}
Con  la property “graph.facebook.com.custom_permissions” si chiede all’utente il permesso di accedere delle  sue determinate informazioni. In base a quello che si vuole fare c’è bisogno di determinati permessi (o autorizzazioni). Qui una lista completa dei possibili permessi.
Prestare attenzione alla successURL, l’url a cui si viene reindirizzati dopo aver effettuato l’accesso a facebook. Se tale URL non esiste facebook lancerà la seguente eccezione:
{
   "error": {
"message": "redirect_uri isn't an absolute URI. Check RFC 3986.",
"type": "OAuthException",
"code": 191
}
}







N.B. nel log del server apparrà l’errore:

Server returned HTTP response code: 400 for URL:

per capire meglio quale è il vero errore, prendere l’URL e copiarla nel browser.

PAGINA LOGIN E SUCCESS
Nella pagina di login è presente un semplice tasto che richiama l’action su definita

login.xhtml

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ice="http://www.icesoft.com/icefaces/component"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:head />
<h:body>

<h:form>
<h:commandButton value="LOGIN" action="#{facebookBean.socialConnect}" />
</h:form>
</h:body>
</html>

socialLoginSuccess.xhtml

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html">
<h:head>
<title>Social login success</title>
</h:head>
<h:body>
LOGIN SUCCESS
</h:body>
</html>

ESECUZIONE
Andare sull’url “http://localhost:8080/ProvaJSF/login.jsf”:

cliccando sul tasto LOGIN si viene reindirizzati su facebook che ci chiederà se congediamo i permessi su definiti, una volta cliccato su OK si verrà rimandati nell’URL di success:

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *