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);
}
}
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: