解决Openshift使用新浪OAuth库的Permission denied问题

阅读更多

在Openshift上使用新浪的库开发微博客户端,当调用oauth.getAccessTokenByCode(code);时报错:Permission denied。这个问题在前面的博客里面提到:http://tedeum.iteye.com/blog/1880767。

经过搜索研究,发现Openshift不支持绑定外网ip,端口转发也只限于安装rhc的电脑,而在新浪微博java api的代码中是这样写的:

			Socket socket = socketfactory.createSocket();
			SocketAddress localaddr = new InetSocketAddress(localAddress,
					localPort);
			SocketAddress remoteaddr = new InetSocketAddress(host, port);
			socket.bind(localaddr);
			socket.connect(remoteaddr, timeout);
			return socket;

 跟踪调试,发现localAddress是null这就表示InetAddress.anyLocalAddress();也包括了外网地址,当注射相关代码行后,运行通过,注释后的代码如下:

			Socket socket = socketfactory.createSocket();
//			SocketAddress localaddr = new InetSocketAddress(localAddress,
//					localPort);
			SocketAddress remoteaddr = new InetSocketAddress(host, port);
//			socket.bind(localaddr);
			socket.connect(remoteaddr, timeout);
			return socket;

 也只可以明确使用系统参数OPENSHIFT_INTERNAL_IP,替换本地IP,不过我没有测试。

你可能感兴趣的:(openshift,oauth,Permission,denied,weibo,java)