Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>I actually just got this working in my JSP project! Ok Here is what you need to know. The method you are trying for is called the "Server Side" approach (there is also a Client Side approach which can share a lot of the same code. There are two URLs that you will use (I've wrapped this all into a helper classed I've called FacebookConfig which reads what it needs from a facebook.properties file:</p> <pre><code>import java.io.IOException; import java.io.InputStream; import java.util.Properties; import lombok.Cleanup; import st.fan.model.users.Listener; public class FacebookConfig { public static String auth_uri; public static String id; public static String key; static{ Properties properties = new Properties(); try { @Cleanup InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("facebook.properties"); properties.load(in); auth_uri = (String)properties.get("auth_uri"); id = (String)properties.get("id"); key = (String)properties.get("key"); } catch (IOException e) { e.printStackTrace(); } } public static String getOAuthDialogUrl() { return "https://www.facebook.com/dialog/oauth?client_id="+id+"&amp;redirect_uri="+auth_uri+"&amp;scope=email"; } public static String getOAuthUrl(String code) { return "https://graph.facebook.com/oauth/access_token?client_id="+id+"&amp;redirect_uri="+auth_uri+"&amp;client_secret="+key+"&amp;code="+code; } public static String getGraphUrl(String token) { return "https://graph.facebook.com/me?access_token="+token; } public static String getProfilePictureUrl(Listener profile) { return "https://graph.facebook.com/"+profile.getFacebookId()+"/picture"; } public static String getProfilePictureUrl(Listener profile, String size) { return "https://graph.facebook.com/"+profile.getFacebookId()+"/picture?type="+size; } } </code></pre> <p>Now the user is redirected to the getOAuthDialogUrl() which includes the URL of a servlet called <a href="http://example.com/auth/facebook/Auth" rel="nofollow">http://example.com/auth/facebook/Auth</a> which has this doGet() method</p> <pre><code>public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { Transaction tx = null; Session dao = SessionFactoryUtil.getInstance().getCurrentSession(); String redirect = "/auth/facebook/sorry"; try { String code = request.getParameter("code"); if(code != null) { String[] pairs = NetUtils.fetch(new URL(FacebookConfig.getOAuthUrl(code))).toString().split("&amp;"); String accessToken = null; Integer expires = null; for (String pair : pairs) { String[] kv = pair.split("="); if (kv.length == 2) { if (kv[0].equals("access_token")) { accessToken = kv[1]; } if (kv[0].equals("expires")) { expires = Integer.valueOf(kv[1]); } } } if(accessToken != null &amp;&amp; expires != null) { try { JSONObject fb_profile = new JSONObject(NetUtils.fetch(new URL(FacebookConfig.getGraphUrl(accessToken)))); tx = dao.beginTransaction(); ListenerSession session = authenticate(request, dao); if(session == null) { session = createSession(response, dao); } String facebookid = fb_profile.getString("id"); String name = fb_profile.getString("name"); String email = fb_profile.getString("email"); String username = facebookid; if(fb_profile.has("username")) { username = fb_profile.getString("username"); } Listener user = ListenerDAO.findByFacebookId(facebookid, dao); if(user != null) { user.setDisplayName(name); user.setEmail(email); dao.save(user); } else { user = new Listener(); user.setUsername(username); user.setDisplayName(name); user.setEmail(email); user.setDateCreated(new DateTime()); user.setFacebookId(facebookid); user.setStatus(ListenerStatus.ACTIVE); dao.save(user); } ListenerSessionDAO.link(session, user, dao); redirect = "/"; tx.commit(); } catch (JSONException e) { log.error("Parsing Facebook Graph Response", e); } } else { log.error("Expected values not found!"); log.error("accessToken="+accessToken); log.error("expires="+expires); } } else { log.error("Missing 'code' param!"); } } catch(Exception e) { e.printStackTrace(System.out); } finally { if(dao.isOpen()) { dao.close(); } } response.sendRedirect(redirect); } </code></pre> <p>And (in addition to using Hibernate, Project Lombok and a simple JSON library called org.json) I use a simple helper function called fetch() which takes a URL and returns the contents as a string which has this code:</p> <pre><code>import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; public class NetUtils { public static String fetch(URL url) throws IOException { URLConnection connection = url.openConnection(); String line; StringBuilder builder = new StringBuilder(); BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); while((line = reader.readLine()) != null) { builder.append(line); } return builder.toString(); } } </code></pre> <p>This should get you off the ground :)</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload