每个人的人人网公共主页主页链接网址在哪能找到

名人同名同姓
娱乐明星社会名人历史人物人人达人推荐
人人客户端下载这就是人人,一个真实的社交网络,将你和你的好友联系起来。
结识更多同名同姓的有缘人,请先
北京千橡网景科技发展有限公司:
文网文[号··京公网安备号·甲测资字
文化部监督电子邮箱:wlwh@··
文明办网文明上网举报电话: 举报邮箱:&&&&&&&&&&&&
请输入手机号,完成注册
请输入验证码
密码必须由6-20个字符组成
下载人人客户端
品评校花校草,体验校园广场周杰伦人人网主页网址是?_百度知道人人 首页换肤在哪?首页的设置又在哪?右上角根本就没有,提示里面显示的是上一个界面的设置_百度知道WEB网站帐号登录入门教程
本教程教你从零开始建立起一个Web网站,并教你如何利用人人网开放平台提供的各种接口或SDK实现。
为了完成后面的教程,你需要搭建一个本地web server来模拟你的web网站。
搭建web server的详细过程在这里略去不讲。如果你使用Java语言来进行服务器编程,那么你可以选择使用Tomcat做服务器,你可以先参考来启动你的web server,并保证在80端口监听服务,然后再回到本教程。
搭建的web server环境可能是多种多样的,服务器编程环境也可能是多种多样的,如使用Java、PHP、Python等。在这个教程中,我们使用Java代码做示例。
在本教程中,我们假设你的应用服务器的访问地址是,在实际动手操作时请替换成你的真实域名。
如果你没有正式注册的域名而又想尝试本教程,可以自己选择一个测试用的域名,并在hosts文件中将该域名绑到你的测试服务地址,如127.0.0.1。
任何应用(包括网站)为了接入开放平台,都需要在开放平台申请一个应用,并做出相应的配置。
请先按照完成描述的步骤,然后回到本教程继续下面的配置。
在中的“应用类型”选“网站”。
在完成后,请记下API Key、应用ID和Secret Key,用于后面的教程。
在左边选择“网站信息”那个Tab,配置如下的信息:
网站URL:第三方网站的地址。这个地址的用途:当人人网用户在人人网上看到你的网站时(比如在应用中心或菜单中),点击以后会去的地址。
网站根域名:网站的根域名。这个值非常重要,在使用进行授权时会对这个根域名进行验证,详见:。如果你的网站支持多域名,可以在这里指定多个域名,这时候多个域名之间用逗号分隔。
为了简单起见,我们直接使用Servlet来创建这个模拟网站。
下面我们搭建起一个基于Servlet规范的Web工程。如果你使用其它语言(如PHP/C#)进行服务器端编程,请跳过此节的描述。
首先你需要获得一个servlet-api.jar包。这个jar包可以在你的tomcat安装目录下的lib目录中找到;或者也可以在下载。将这个jar包放置到工程的/WEB-INF/lib目录下,并在工程编译时把这个jar包放到build path中。
修改web.xml文件内容如下:
&source lang=&xml&&
&?xml version=&1.0& encoding=&ISO-8859-1&?&
&web-app xmlns=&/xml/ns/j2ee& xmlns:xsi=&http://www.w3.org/2001/XMLSchema-instance&
xsi:schemaLocation=&/xml/ns/j2ee web-app_2_4.xsd&
version=&2.4&&
&display-name&Renren Website Demo for a Tutorial&/display-name&
&welcome-file-list&
&welcome-file&index.jsp&/welcome-file&
&welcome-file&index.html&/welcome-file&
&/welcome-file-list&
&error-page&
&error-code&404&/error-code&
&location&/404.html&/location&
&/error-page&
&/web-app&
定义应用相关的常量。
与应用相关的信息(如AppId、API Key和Secret),在后面的教程中会反复用到,所以将他们的值定义成一些常量。
创建一个常量类com.yourdomain.website.config.AppConfig,代码如下:
&source lang=&java&&
package com.yourdomain.website.
public final class AppConfig {
public static final String APP_ID = &144142&;
public static final String API_KEY = &02acbca93cdcbf&;
public static final String APP_SECRET = &4ec78c031ebb3cef32fc&;
注意:上面的几个常量的值一定要分别修改成你的应用的AppId、API Key和Secret。这几个值的来历请参考。
在本章中,我们建立起一个简单的帐号系统,用来模拟真实的Web网站的帐号系统。在后面的教程中,“用人人网帐号登录”这个功能会基于这个模拟帐号系统一步步建立起来。
创建一个表示用户信息的User类(com.yourdomain.website.model.User),其内容如下:
&source lang=&java&&
package com.yourdomain.website.
* User类用于表示网站的用户信息
public class User {
* 登录用户名(包含字母和数字),是网站用户的唯一标识
* 用户姓名,用于网站显示
* 用户头像地址
public String getUsername() {
public void setUsername(String username) {
this.username =
public String getPassword() {
public void setPassword(String password) {
this.password =
public String getEmail() {
public void setEmail(String email) {
this.email =
public String getName() {
public void setName(String name) {
this.name =
public String getHeadurl() {
public void setHeadurl(String headurl) {
this.headurl =
*创建存取用户表的DAO类(com.yourdomain.website.dao.UserDAO)。它用于模拟真实的Web网站中的用户存取子系统。
在这个类的实现中,我们用一个静态列表来模拟用户表。真实的用户表应该存储在数据库中,可以持久化。但本类的模拟实现
并不能持久化,重启服务器后用户表中只剩下原来的3个测试帐号。
UserDAO类得实现代码如下:
&source lang=&java&&
package com.yourdomain.website.
import java.util.ArrayL
import java.util.L
import com.yourdomain.website.model.U
* 存取用户表的DAO类。初始用户表中有3个测试帐号。
* 在这个类的实现中,我们用一个静态列表来模拟用户表。
* 真实的用户表应该存储在数据库中,可以持久化。
* 但本类的模拟实现并不能持久化,重启服务器后用户表中只剩下原来的3个测试帐号。
public class UserDAO {
* 单例(Singleton)模式
private static UserDAO instance = new UserDAO();
private UserDAO(){
public static UserDAO getInstance() {
* 用来模拟用户表的静态列表
private static List&User& userTable = new ArrayList&User&();
* 初始化用户表,加入3个测试帐号
User user1 = new User();
user1.setUsername(&test1&);
user1.setPassword(&123456&);
user1.setEmail(&&);
user1.setName(&章子怡&);
user1.setHeadurl(&/fmn049/5/p_large_DXGG_50ec73.jpg&);
userTable.add(user1);
User user2 = new User();
user2.setUsername(&test2&);
user2.setPassword(&123456&);
user2.setEmail(&&);
user2.setName(&徐静蕾&);
user2.setHeadurl(&/fmn054/5/p_large_QWui_5c73.jpg&);
userTable.add(user2);
User user3 = new User();
user3.setUsername(&test3&);
user3.setPassword(&123456&);
user3.setEmail(&&);
user3.setName(&周杰伦&);
user3.setHeadurl(&/fmn051/5/p_large_NW41_098a.jpg&);
userTable.add(user3);
public synchronized User getUser(String username) {
for (User user : userTable) {
if (username.equals(user.getUsername())) {
public synchronized void addUser(User user) {
userTable.add(user);
在这一节中,我们创建一个登录页面,对用户名和密码进行验证从而创建一个会话。
新建一个Servlet类:com.yourdomain.website.LoginServlet,代码内容如下:
&source lang=&java&&
package com.yourdomain.
import javax.servlet.RequestD
import javax.servlet.ServletE
import javax.servlet.http.HttpS
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpServletR
import com.yourdomain.website.dao.UserDAO;
import com.yourdomain.website.model.U
* 完成网站登录的Servlet
@SuppressWarnings(&serial&)
public class LoginServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, java.io.IOException {
RequestDispatcher welcomeDispatcher = request.getRequestDispatcher(&/views/login.jsp&);
welcomeDispatcher.forward(request, response);
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, java.io.IOException {
String username = request.getParameter(&username&);
String password = request.getParameter(&password&);
if (username != null && password != null) {
User user = UserDAO.getInstance().getUser(username);
if (user != null) {
if (password.equals(user.getPassword())) {
//用户名和密码验证通过,将用户身份信息保存在会话中
request.getSession().setAttribute(&user&, user);
//已登录,跳转到个人主页
response.sendRedirect(&/profile&);
//没登录成功,跳转到登录页
response.sendRedirect(&/login&);
在上面的代码中,当用户名和密码验证通过以后,“request.getSession().setAttribute("user", user);”一句代码将用户登录信息保存到一个会话中。在真实的Web网站中,很可能网站有自己的用户会话(或“票”)管理系统,可能具有自己特有的会话持久化以及生命周期管理功能,这里只是用HttpSession来进行一个简单的模拟。
在web.xml文件中添加如下Servlet配置:
&source lang=&xml&&
&servlet-name&LoginServlet&/servlet-name&
&servlet-class&com.yourdomain.website.LoginServlet&/servlet-class&
&/servlet&
&servlet-mapping&
&servlet-name&LoginServlet&/servlet-name&
&url-pattern&/login&/url-pattern&
&/servlet-mapping&
创建一个登录用的jsp页面(在Web工程下的路径是/views/login.jsp),内如如下:
&source lang=&jsp&&
&%@ page contentType=&text/charset=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&&
&meta http-equiv=&Content-Type& content=&text/ charset=UTF-8& /&
&title&Renren Website Demo -- Login&/title&
&h3&这里是网站登录页面&/h3&
&form method=&post& action=&/login&&
&label for=&username&&用户名:&/label&&input id=&username& type=&text& name=&username&/&&br/&
&label for=&password&&密码:&/label&&input id=&password& type=&password& name=&password&/&&br/&
&input type=&submit& value=&登录&/&
在真实的Web网站中,对于需要用户身份的一些服务,如个人主页(profile)服务,需要对会话进行验证并从会话中获取用户身份信息。
下面,我们创建一个模拟的个人主页服务。
新建一个Servlet类:com.yourdomain.website.ProfileServlet,代码内容如下:
&source lang=&java&&
package com.yourdomain.
import javax.servlet.RequestD
import javax.servlet.ServletE
import javax.servlet.http.HttpS
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpServletR
import com.yourdomain.website.model.U
* 登录后的个人主页
@SuppressWarnings(&serial&)
public class ProfileServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, java.io.IOException {
//验证会话是否是登录状态,如果是没有登录,则跳转到登录页面去;否则,取出用户信息进行展示
User user = (User) request.getSession().getAttribute(&user&);
if (user == null) {
//未登录,跳转到登录页面去
response.sendRedirect(&/login&);
RequestDispatcher welcomeDispatcher = request.getRequestDispatcher(&/views/profile.jsp&);
welcomeDispatcher.forward(request, response);
在上面的代码中,从HttpSession中取出用户身份信息。如果取到的信息为空,说明没有用户身份,这时跳到登录页去;否则把用户身份信息送到个人主页去显示。
在web.xml文件中添加如下Servlet配置:
&source lang=&xml&&
&servlet-name&ProfileServlet&/servlet-name&
&servlet-class&com.yourdomain.website.ProfileServlet&/servlet-class&
&/servlet&
&servlet-mapping&
&servlet-name&ProfileServlet&/servlet-name&
&url-pattern&/profile&/url-pattern&
&/servlet-mapping&
创建一个jsp页面(在Web工程下的路径是/views/profile.jsp),内如如下:
&source lang=&jsp&&
&%@ page contentType=&text/charset=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&&
&meta http-equiv=&Content-Type& content=&text/ charset=UTF-8& /&
&title&Renren Website Demo -- Profile&/title&
&h3&这里是登录后的个人主页&/h3&
&img src=&${user.headurl}&/&&br/&
你好,${user.name},欢迎使用本网站。 &a href=&/logout&&退出&/a&
&/html&&/source&
在这个简单的个人主页中,显示了用户的头像和姓名。里面的“退出”链接尚不起作用,在后面会加上处理。
新建一个Servlet类:com.yourdomain.website.LogoutServlet,代码内容如下:
&source lang=&java&&
package com.yourdomain.
import javax.servlet.ServletE
import javax.servlet.http.HttpS
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpServletR
* 用于退出登录的Servlet
@SuppressWarnings(&serial&)
public class LogoutServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, java.io.IOException {
//删除当前会话信息
request.getSession().removeAttribute(&user&);
response.sendRedirect(&/login&);
在上面的代码中,用户退出时在HttpSession中将用户身份信息删除。
在web.xml文件中添加如下Servlet配置:
&source lang=&xml&&
&servlet-name&LogoutServlet&/servlet-name&
&servlet-class&com.yourdomain.website.LogoutServlet&/servlet-class&
&/servlet&
&servlet-mapping&
&servlet-name&LogoutServlet&/servlet-name&
&url-pattern&/logout&/url-pattern&
&/servlet-mapping&
这时候重启web server,访问个人主页/profile ,会跳转到登录页去,如下:
我们可以用三个测试帐号来登录:用户名分别是test1,test2,test3,密码都是123456。
比如我们用test2帐号登录后,显示其个人主页内容:
点击“退出”链接后可以退出登录,然后可以换用其他帐号登录。
注意:在本章的教程中,我们构建起一个简单的帐号系统,用于模拟真实Web网站的帐号系统。在这个模拟实现中,很多实现场景尽量简化,例如,在真实的Web网站中,除了登录系统之外,肯定还有注册系统,在这里省略了。
经过本章的教程,还没有集成任何人人网相关的功能,但在后面的教程中,“用人人网帐号登录”这个功能会基于本章建立的模拟帐号系统一步步建立起来。
在本章中,我们对上一章建立起来的模拟帐号系统进行扩展,使它能够支持“用人人网帐号登录”。使用的技术是人人网提供的。
下载登录按钮素材。
为了方便第三方开发接入功能,人人网准备了很多现成的登录按钮标识,第三方应用开发者可以自己选用:。在这个下载页面,从“web&wap标准按钮”下载区选择一个“用人人帐号登录”的按钮图片。
将下载的图片重命名,并放置到工程的这个位置:/img/renren_login_button.png
修改/views/login.jsp,将图片引用代码加入,修改后的内容如下:
&source lang=&jsp&&
&%@ page contentType=&text/charset=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&&
&meta http-equiv=&Content-Type& content=&text/ charset=UTF-8& /&
&title&Renren Website Demo -- Login&/title&
&h3&这里是网站登录页面&/h3&
&form method=&post& action=&/login&&
&label for=&username&&用户名:&/label&&input id=&username& type=&text& name=&username&/&&br/&
&label for=&password&&密码:&/label&&input id=&password& type=&password& name=&password&/&&br/&
&input type=&submit& value=&登录&/&
&p&如果你没有网站帐号,你还可以用人人网帐号登录本网站:&/p&
&a href=&/oauth/authorize?client_id=
${appId}&response_type=code&redirect_uri=${redirectUri}&display=page&&&img style=
&border:0px& src=&/img/renren_login_button.png&/&&/a&
上面代码实现了:当点击“用人人帐号登录”按钮之后,页面会跳转到OAuth 2.0的授权页面去授权。授权完成后会跳转回到${redirectUri}。
上面代码中的几个JSP变量还没有赋值,这需要修改LoginServlet给它们赋值。
修改com.yourdomain.website.LoginServlet的代码如下:
&source lang=&java&&
package com.yourdomain.
import java.net.URLE
import javax.servlet.RequestD
import javax.servlet.ServletE
import javax.servlet.http.HttpS
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpServletR
import com.yourdomain.website.config.AppC
import com.yourdomain.website.dao.UserDAO;
import com.yourdomain.website.model.U
* 完成网站登录的Servlet
@SuppressWarnings(&serial&)
public class LoginServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, java.io.IOException {
request.setAttribute(&appId&, AppConfig.APP_ID);
request.setAttribute(&redirectUri&, URLEncoder.encode(&/rr_login&, &UTF-8&));
RequestDispatcher welcomeDispatcher = request.getRequestDispatcher(&/views/login.jsp&);
welcomeDispatcher.forward(request, response);
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, java.io.IOException {
String username = request.getParameter(&username&);
String password = request.getParameter(&password&);
if (username != null && password != null) {
User user = UserDAO.getInstance().getUser(username);
if (user != null) {
if (password.equals(user.getPassword())) {
//用户名和密码验证通过,将用户身份信息保存在会话中
request.getSession().setAttribute(&user&, user);
//已登录,跳转到个人主页
response.sendRedirect(&/profile&);
//没登录成功,跳转到登录页
response.sendRedirect(&/login&);
为了支持人人用户登录,当一个人人用户使用人人帐号登录进来的时候,我们需要做下面的判断:
判断当前用户是不是新来的用户。如果用户是第一次来,我们需要为这个新来的用户在用户表中创建一个新的记录。
如果不是新用户,那么这个用户对应的用户表记录是哪一个。
为了解决这些问题,我们需要建立一个帐号关联表,用于存储从人人帐号ID到网站帐号的映射关系。
真实的帐号关联表应该存储在数据库中,可以持久化。在我们的模拟实现中,我们用一个静态Map来模拟帐号关联表。并不能持久化,重启服务器后帐号关联表清空。
下面新建一个com.yourdomain.website.dao.RenrenUserMappingDAO类,用来模拟对于帐号关联表的存取。代码内如如下:
&source lang=&java&&
package com.yourdomain.website.
import java.util.HashM
import java.util.M
* 存取帐号关联表的DAO类。
* 帐号关联表用于存储从人人帐号ID到网站帐号的映射关系。
* 在这个类的实现中,我们用一个静态Map来模拟帐号关联表。
* 真实的帐号关联表应该存储在数据库中,可以持久化。
* 但本类的模拟实现并不能持久化,重启服务器后帐号关联表清空。
public class RenrenUserMappingDAO {
* 单例(Singleton)模式
private static RenrenUserMappingDAO instance = new RenrenUserMappingDAO();
private RenrenUserMappingDAO(){
public static RenrenUserMappingDAO getInstance() {
* 用来模拟帐号关联表的静态Map;保存从人人网UID到网站username的映射
private static Map&Integer, String& userMappingTable = new HashMap&Integer, String&();
public synchronized String getUsername(int rrUid) {
return userMappingTable.get(rrUid);
public synchronized void addMapping(int rrUid, String username) {
userMappingTable.put(rrUid, username);
为了在OAuth 2.0登录后获取到用户信息,我们需要调用来完成,但是人人网提供的Java SDK已经将调用细节进行了封装。
下面,我们到去下载Java SDK:可以直接下载jar包,也可以下载源文件压缩包或在官方代码库使用Hg获取最新的代码。
注意:Java SDK依赖一个称为json-simple的jar包,用于处理返回的JSON格式的响应文本。如果直接用jar包的话,可以到去下载renren-api-java-sdk.jar和json-simple-1.1.jar并放置到/WEB-INF/lib目录下,并在工程编译时把这个jar包放到build path中。
Java SDK在使用前需要初始化一些重要参数,如API Key以及Secret等。这个初始化只需要执行一次,所以我们放在ServletContextListener中去执行。
创建一个ServletContextListener(类名:com.yourdomain.website.ApiInitListener),内如如下:
&source lang=&java&&
package com.yourdomain.
import javax.servlet.ServletContextE
import javax.servlet.ServletContextL
import com.renren.api.client.RenrenApiC
import com.yourdomain.website.config.AppC
public class ApiInitListener implements ServletContextListener{
public void contextDestroyed(ServletContextEvent arg0) {
//Nothing to do
public void contextInitialized(ServletContextEvent arg0) {
RenrenApiConfig.renrenApiKey = AppConfig.API_KEY;
RenrenApiConfig.renrenApiSecret = AppConfig.APP_SECRET;
}&/source&
在这个listener中,我们初始化了API Key和Secret值。
下面把这个listenner配置到web.xml中。在web.xml中添加如下配置:
&source lang=&xml&&
&listener&
&listener-class&com.yourdomain.website.ApiInitListener&/listener-class&
&/listener&
由LoginServlet和login.jsp的代码可以看出,当从OAuth授权成功后,页面会跳转到/rr_login。所以,在这个页面中,需要处理人人用户的登录逻辑。这个页面的处理比较复杂,下面详细介绍。
在web.xml中添加如下Servlet配置:
&source lang=&xml&&
&servlet-name&RenrenLoginServlet&/servlet-name&
&servlet-class&com.yourdomain.website.RenrenLoginServlet&/servlet-class&
&/servlet&
&servlet-mapping&
&servlet-name&RenrenLoginServlet&/servlet-name&
&url-pattern&/rr_login&/url-pattern&
&/servlet-mapping&
新建Servlet类:com.yourdomain.website.RenrenLoginServlet。代码如下:
&source lang=&java&&
package com.yourdomain.
import java.util.HashM
import java.util.M
import java.util.UUID;
import javax.servlet.ServletE
import javax.servlet.http.HttpS
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpServletR
import org.json.simple.JSONA
import org.json.simple.JSONO
import org.json.simple.JSONV
import com.renren.api.client.RenrenApiC
import com.renren.api.client.utils.HttpURLU
import com.yourdomain.website.config.AppC
import com.yourdomain.website.dao.RenrenUserMappingDAO;
import com.yourdomain.website.dao.UserDAO;
import com.yourdomain.website.model.U
* 用于处理用人人网帐号登录的Servlet,
* 当从人人网的OAuth 2.0服务器跳转回来时,会到达这个Servlet,参数中会有code
@SuppressWarnings(&serial&)
public class RenrenLoginServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, java.io.IOException {
String code = request.getParameter(&code&);
if (code == null || code.length() == 0) {
//缺乏有效参数,跳转到登录页去
response.sendRedirect(&/login&);
//到人人网的OAuth 2.0的token endpoint用code换取access token
String rrOAuthTokenEndpoint = &/oauth/token&;
Map&String, String& parameters = new HashMap&String, String&();
parameters.put(&client_id&, AppConfig.API_KEY);
parameters.put(&client_secret&, AppConfig.APP_SECRET);
parameters.put(&redirect_uri&, &/rr_login&);
//这个redirect_uri要和之前传给authorization endpoint的值一样
parameters.put(&grant_type&, &authorization_code&);
parameters.put(&code&, code);
String tokenResult = HttpURLUtils.doPost(rrOAuthTokenEndpoint, parameters);
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(&expiresTime&, expiresTime);
//调用人人网API获得用户信息
RenrenApiClient apiClient = new RenrenApiClient(accessToken, true);
int rrUid = apiClient.getUserService().getLoggedInUser();
JSONArray userInfo = apiClient.getUserService().getInfo(String.valueOf(rrUid), &name,headurl&);
if (userInfo != null && userInfo.size() & 0) {
JSONObject currentUser = (JSONObject) userInfo.get(0);
if (currentUser != null) {
String name = (String) currentUser.get(&name&);
String headurl = (String) currentUser.get(&headurl&);
//判断帐号关联表里有没有现成的关联
String username = RenrenUserMappingDAO.getInstance().getUsername(rrUid);
if (username == null) {
//在帐号关联表里没有记录,用户是第一次来;为这个用户创建一个User对象
User newUser = new User();
newUser.setName(name);
newUser.setHeadurl(headurl);
//自动拼装一个username并随即生成一个password;实际实现时,这里应该保证
拼装出来的username不与其它帐号冲突
username = &renren-& + rrU
String password = UUID.randomUUID().toString();
newUser.setUsername(username);
newUser.setPassword(password);
//保存到用户表
UserDAO.getInstance().addUser(newUser);
//保存到帐号关联表
RenrenUserMappingDAO.getInstance().addMapping(rrUid, username);
user = newU
//用户不是第一次来了,已经在帐号关联表里有了
user = UserDAO.getInstance().getUser(username);
//将用户身份信息保存在会话里
request.getSession().setAttribute(&user&, user);
//已登录,跳转到个人主页
response.sendRedirect(&/profile&);
response.sendRedirect(&/login&);
在上面的代码中,完成后了如下各个逻辑:
从参数中取code;
用code换取access token;
用access token从人人网服务获取用户信息;
查看当前的人人用户在帐号关联表里有没有一项了;
如果有,则从User表中取出对应的用户信息;
如果没有,说明用户第一次来,那么为这个用户创建一个新的User对象,存储到User表中,并在帐号关联表中记录一项;
将用户身份信息保存在会话里。用户成为登录状态,这时跳转到个人主页。
这时我们重启web server,重新访问个人主页/profile ,会跳转到登录页去,如下:
点击“用人人帐号登录”按钮,会先提示输入人人网帐号和密码,如下:
用人人网帐号和密码登录成功后,显示授权页面:
确认授权以后,登录成功,会跳转到个人主页,如下:
我们还需要做一点额外处理,即当人人网的access token过期的时候,我们需要引导用户重新登录并获取一个最新的access token。
在com.yourdomain.website.RenrenLoginServlet中,我们在获取到access token的同时,还获取到了一个expires_in的值,这个值就是access token有效地的生命周期。我们已经根据这个值和当时获取到access token的系统时间,算出了access token的过期时间点,并保存到了登录会话当中(以“expiresTime”为key)。
我们只需在需要用户会话信息的服务中去判断一下expiresTime的值,就知道access token是不是已经过期了。
我们修改com.yourdomain.website.ProfileServlet代码,修改后内容如下:
&source lang=&java&&
package com.yourdomain.
import javax.servlet.RequestD
import javax.servlet.ServletE
import javax.servlet.http.HttpS
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpServletR
import com.yourdomain.website.model.U
* 登录后的个人主页
@SuppressWarnings(&serial&)
public class ProfileServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, java.io.IOException {
//验证会话是否是登录状态,如果是没有登录,则跳转到登录页面去;否则,取出用户信息进行展示
User user = (User) request.getSession().getAttribute(&user&);
if (user == null) {
//未登录,跳转到登录页面去
response.sendRedirect(&/login&);
Long expiresTime = (Long)request.getSession().getAttribute(&expiresTime&);
if (expiresTime != null) {
long currentTime = System.currentTimeMillis() / 1000;
System.out.println(&expiresTime = & + expiresTime + &; currentTime = & + currentTime);
if (currentTime & expiresTime) {
//用户会话过期了,跳转到登录页面去
response.sendRedirect(&/login&);
RequestDispatcher welcomeDispatcher = request.getRequestDispatcher(&/views/profile.jsp&);
welcomeDispatcher.forward(request, response);
在上面的代码中,将expiresTime的值与当前系统时间进行比较,从而判断是否过期。
修改com.yourdomain.website.LogoutServlet代码,在退出时将expiresTime值从会话中删除,如下:
&source lang=&java&&
package com.yourdomain.
import javax.servlet.ServletE
import javax.servlet.http.HttpS
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpServletR
* 用于退出登录的Servlet
@SuppressWarnings(&serial&)
public class LogoutServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, java.io.IOException {
//删除当前会话信息
request.getSession().removeAttribute(&user&);
request.getSession().removeAttribute(&expiresTime&);
response.sendRedirect(&/login&);
在接入和测试完你的Web网站之后,应该提交给人人网进行审核。
在你的网站被审核通过之前,访问人数会受到一定的限制。等到你的网站被审核通过后,所有限制会取消,并且从审核通过第二天开始你的网站会出现在人人网的应用列表页。
在应用“编辑属性”里面,选择“应用提交”的Tab,最后补充各项开发者信息,点击“保存开发者信息”进行保存。最后点击“提交应用”,如下图:
在提交审核之后,可以随时查看应用的审核进度:
本教程只演示了用人人网帐号登录你的Web网站的功能。Web网站接入更多功能可以参考。
即使在你的Web网站被审核通过并上线以后,你仍然可以(而且应该)不断地对接入功能进行改进,来保证持续地提升用户体验。
本教程对应的最新的代码可以在下载。
想试试吗?
北京千橡网景科技发展有限公司:
文网文[号··京公网安备号·甲测资字
文化部监督电子邮箱:wlwh@··
文明办网文明上网举报电话: 举报邮箱:admin1@&&&&&&&&&&&&

我要回帖

更多关于 人人网公共主页 的文章

 

随机推荐