文档章节

让应用和社交系统交互-spring social介绍

fir01
 fir01
发布于 2012/08/01 11:28
字数 628
阅读 1534
收藏 11

需求:使用spring social facebook;集成多个社会化组件,如 Twitter等

解决方案:

问题一:仅使用spring social facebook

1)下载相关包http://www.springsource.org/spring-social/

2)解决oauth2登陆获取令牌问题:方案有两个,

    一是直接使用httpClient取访问,二是使用spring social提供的组件:

        a.添加链接:

<a href="https://www.facebook.com/dialog/oauth?client_id=${facebook_client_id!}&redirect_uri=${facebook_redirect_uri!}&state=${facebook_login_uuid!}"><img src="${base}/img/facebook.png" />登陆</a>

           注意:可以不直接使用此路径,spring social提供了一个Controller,默认自动装配了一些路径,不过个人不建议使用;此<a>路径也可以放在action中隐藏起来,在服务器端使用httpClient访问,没测试,请自己尝试,spring的Controller默认是在后端处理此路径的

         b.上面窗口会弹出facebook登陆窗口,使用自己的用户名账号登陆后,在服务器端回调路径中获取code,并使用code换取令牌。

            

@Autowired
    FacebookConnectionFactory  factory;
String code = request.getParameter("code");
String state = request.getParameter("state");
	
		String tokenResult;
		try {
			tokenResult = accessTokenFacebook(code);//第一种方式使用httpClient
			
			OAuth2Operations oauthOperations = factory.getOAuthOperations();//第二种方式使用spring
			AccessGrant accessGrant = oauthOperations.exchangeForAccess(code, Propertyholder.getContextProperty("facebook.redirect_uri"), null);
			Connection<Facebook> connection = factory.createConnection(accessGrant);
			Facebook facebook = connection.getApi();//可以用它去访问facebook数据库了
			
			ConnectionData connectionData=connection.createData();//这是访问权限信息可以放入缓存
JSONObject tokenJson = (JSONObject) JSONValue.parse(tokenResult);
			if (tokenJson != null) {
				String accessToken = (String) tokenJson.get("access_token");
				Long expiresIn = (Long) tokenJson.get("expires_in");//距离过期时的时间段(秒数)
				long currentTime = System.currentTimeMillis() / 1000;
				long expiresTime = currentTime + expiresIn;//即将过期的时间点(秒数)
				request.getSession().setAttribute("facebook_expires_time", expiresTime);
				request.getSession().setAttribute("facebook_access_token", accessToken);
				
				return "facebooktest.ftl";//非管理员用户返回到会员中心

			}
		} catch (ClientProtocolException e) {
			e.printStackTrace();
		} catch (ParseException e) {
			e.printStackTrace();
		} catch (URISyntaxException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

private String accessTokenFacebook(String code) throws URISyntaxException, ClientProtocolException, IOException, ParseException{
    	
    	String uri="https://graph.facebook.com/oauth/access_token?client_id="
    		+Propertyholder.getContextProperty("facebook.client_id")
    		+"&redirect_uri="+Propertyholder.getContextProperty("facebook.redirect_uri")
    		+"&client_secret="+Propertyholder.getContextProperty("facebook.client_secret")
    		+"&code="+code;
    	
    	HttpClient httpclient = new DefaultHttpClient();
    	HttpGet httpget = new HttpGet(uri);
    	HttpResponse response = httpclient.execute(httpget);
    	HttpEntity entity = response.getEntity();
    	String str="";
    	if (entity != null) {
    		str=EntityUtils.toString(entity, "UTF-8");
    	}
    	return str;
    }

注意:connectionData可以放入session以便下一次请求facebook数据时重用,和下面使用request.getSession().setAttribute("facebook_expires_time", expiresTime)是一个目的。

问题二:集成多个社会化组件,如 Twitter等。主要问题是解决多用户和多用的连接数据重用问题。

spring提供非常完善的工厂类用来创建和管理各种社交系统链接,如果是存关系数据库,可以直接采用spring的方案存在数据库中,另外也可以放二级缓存或者图形数据库中,但是需要自己实现spring的ConnectionRepository接口。

© 著作权归作者所有

上一篇: spring mvc 总结
下一篇: 获取facebook的id
fir01
粉丝 19
博文 110
码字总数 34117
作品 0
长沙
项目经理
私信 提问
Spring Social 1.1.2 发布,Spring 社交扩展框架

Spring Social 1.1.2 发布,包括Spring Social 的内核、web、安全和配置模块。此版本修复了上一版本中的依赖性问题。详情请看发行说明。 Project Site | Reference | JavaDoc Spring Social...

oschina
2015/05/20
1K
0
Spring Social Facebook 2.0.3 发布

Spring Social Facebook 2.0.3 发布,更新如下: 更多内容请看:changelog Project Site | Reference | JavaDoc Spring Social 是 Spring 框架的扩展,用来方便开发Web社交应用程序,可通过该...

oschina
2015/12/10
1K
0
Spring Social 1.0 正式版发布

Spring Social 1.0 正式版发布了,该版本在 1.0.0.RC3 的基础上修复了所有报告的bug,详细改进记录请看:(Core | Facebook | Twitter) Spring Social 是 Spring 框架的扩展,用来方便开发Web...

红薯
2011/09/09
1K
3
Spring Social 1.1.3 发布,Spring 社交扩展框架

Spring Social 1.1.3 发布,更新内容暂未发布。下载地址:v1.1.3.RELEASE。 Project Site | Reference | JavaDoc Spring Social 是 Spring 框架的扩展,用来方便开发Web社交应用程序,可通过...

淡漠悠然
2015/11/17
728
2
Spring Social Facebook 2.0.0.RELEASE 发布

Spring Social Facebook 2.0.0.RELEASE 发布,此版本主要是改进了 Facebook Graph API,详细内容请看发行说明。 Spring Social 是 Spring 框架的扩展,用来方便开发Web社交应用程序,可通过该...

oschina
2015/04/16
1K
1

没有更多内容

加载失败,请刷新页面

加载更多

java导出json数据到excel中

可以用前端js导,也可以使用后端的POI导出 前端导出 base64(s) { return window.btoa(unescape(encodeURIComponent(s))) },exportExcel() { // 前端导出excel console.log(this.showL...

咸鱼-李y
14分钟前
2
0
Python大神的学习秘籍!Pycharm快捷键大全

一、编辑(Editing) Ctrl+Space 基本的代码完成(类、方法、属性) Ctrl+Alt+Space 快速导入任意类 Ctrl+Shift+Enter 语句完成 Ctrl+P 参数信息(在方法中调用参数) Ctrl+Q 快速查看文档 ...

Python派森
19分钟前
0
0
CentOS 7创建Samba共享目录

1. 安装Samba服务 yum -y install samba# 查看yum源中Samba版本yum list | grep samba# 查看samba的安装情况rpm -qa | grep samba Samba服务器安装完之后, 会生成配置文件...

wzb88
23分钟前
0
0
node对接易支付

安装md5第三方模块 npm install utility --save-dev const utility=require("utility"); //导入md5第三方库let data={ pid:"你的pid", money:"金额", ......

Chason-洪
28分钟前
0
0
资深架构师带你从JVM层面了解线程的启动和停止

文章简介 这一篇主要围绕线程状态控制相关的操作分析线程的原理,比如线程的中断,线程的通信等,内容比较多,可能会分两篇文章 内容导航 线程的启动的实现原理 线程停止的实现原理分析 为什...

Java-飞鱼
55分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部