用户中心++详细设计文档.docx

上传人:b****8 文档编号:9483716 上传时间:2023-02-04 格式:DOCX 页数:17 大小:121.40KB
下载 相关 举报
用户中心++详细设计文档.docx_第1页
第1页 / 共17页
用户中心++详细设计文档.docx_第2页
第2页 / 共17页
用户中心++详细设计文档.docx_第3页
第3页 / 共17页
用户中心++详细设计文档.docx_第4页
第4页 / 共17页
用户中心++详细设计文档.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

用户中心++详细设计文档.docx

《用户中心++详细设计文档.docx》由会员分享,可在线阅读,更多相关《用户中心++详细设计文档.docx(17页珍藏版)》请在冰豆网上搜索。

用户中心++详细设计文档.docx

用户中心++详细设计文档

 

 

用户中心详细设计

1引言

1.1编写目的

本详细设计说明书是针对用户中心系统而编写的,主要目的是描述清楚系统的详细设计,明确系统的结构、模块的划分、各个模块的功能,并确定实现系统所需的各种细节,以及各个相关开发实现人员的职责范围,协调不同部门之间的协同工作,以便所有实现者可以根据本文档直接着手进行自己相应开发任务。

1.2背景

系统名称:

用户中心

简介:

用户中心是一个将阿里巴巴中文站、国际站、ITBU各产品线等用户整合在一起的,提供统一的用户相关操作功能,包括中文站、国际站到ITBU对用户透明的免登功能、用户信息查询功能等,以为所有阿里巴巴的用户提供更好的用户体验,连同计费中心、产品中心等,共同成为阿里巴巴“建国大业”项目的重要组成部分,是阿里巴巴未来十年战略起步的重要基础建设。

系统可能的主要开发者、相关者:

阿里巴巴ITBU、ITBU各产品线、中文站(CCBU)、国际站(ICBU)等。

1.3专用术语定义

文档中出现的longid均指memberid,site指domain

2系统需求

2.1业务场景

2.1.1免登

⏹从ICBU/CCBU免登录到ITBU(单向)

一个在ICBU/CCBU已经登录成功的用户,点击ICBU/CCBU网站页面或ITBU页面上的一个链接,直接免登录到ITBU,而不需要再次登录。

⏹从旺旺聊天面板免登录到ITBU

用户点击阿里旺旺聊天窗口内的一个链接,能直接免登录到ITBU,不需要重新登录一次。

2.1.2UDB

⏹由业务模块远程调用用户信息相关接口

由业务模块,比如ITBU的E网打进、外贸版等产品线的业务通过远程调用UDB模块的接口,来查询用户状态,包括以下各种功能:

1.查询当前登录用户的会话信息

2.获取用户信息资料

3.注册CCBU/ICBU新用户

4.用户登录(校验用户名和密码)

5.一个已经登录的用户进行手动登出系统的操作支持

6.ITBU提供对对用户透明的在CCBU/ICBU修改用户资料、修改密码、用户登录和查看用户资料的功能

⏹系统内部免登录模块和UDB模块之间的访问

UDB模块需要提供给免登录模块相应的用户登录接口

2.1数据迁移需求

由于在此之前已经有用户系统,新的用户中心的开发需要考虑新老数据的迁移问题,必须将原有的数据安全、平滑地迁移到新系统中来。

3设计方案

3.1系统结构

用户免登一共分3模块,ITBU模块,CCBU/ICBU模块,TokenService模块。

具体模块关系图如图3-1:

图3-1具体模块关系

3.2模块划分

3.2.1UDB模块

登录流程:

1.根据siteid,loginid匹配唯一的userid,若userid不存在就创建一个;

2.将userid,siteid,loginid,还有当前时间戳等信息组合,通过加密算法生成当前的登录上下文信息;

3.将登录上下文信息保存到response的cookie中,在客户端记录以方便后期的查询。

 

 

图3-2UDB用户登录模块流程图

3.2.2免登录模块

该模块主要解决用户从CCBU/ICBU网站免登到ITBU页面模块。

主要采用token+签名机制保证免登的安全性。

CCBU/ICBU和TokenService,ITBU3个模块分别部署在3台不同应用上。

token目前保存在MemCached中,外部访问全部走https.免登步骤与事例如下:

1.用户Browser → CCBU/ICBU  eg:

2.传参校验,生成保存token至Memcached.

3.用户Browser →ITBUeg:

4.token,ip,ref参数校验,从MemCached中取ip,ref跟当前Request的ip,ref做参数校验

5.用户Browser →钱掌柜/外贸版/E网打尽 eg:

 

图3-3用户免登录模块顺序图

图3-4用户免登录模块流程图

4详细设计

4.1接口设计

4.1.1内部接口设计

4.1.1.1UDB模块

4.1.2.1.1.1AuthCookie内容设计

Authcookie用来存放udb的sessionid,保存格式:

cookie名称:

udb:

az

存放内容:

1.Siteid

2.Loginid

3.Userid

4.用户显示名称

将以上三个数据用AES的方式加密压缩后存储在Cookie中

sid之前加上名称前缀udb,防止该cookie的值被业务模块不小心覆盖。

publicinterfaceIUserService{

/**

*获得当前的登录用户信息

*@paramrequest

*@returnAuthCookie

*/

publicAuthCookiegetAuthCookie(HttpServletRequestrequest);

/**

*根据userId获取用户资料

*@paramuserId

*@returnUserProfileResult

*/

publicUserProfileResultgetUserProfileByUserId(StringuserId);

/**

*根据siteid,loginid和用户资料注册新用户

*@paramsiteid

*@paramloginid

*@paramprofile

*@returnUserResult

*/

publicUserResultregister(Stringsiteid,Stringloginid,Mapprofile);

/**

*通过用户的loginid、siteid和密码验证用户的有效性

*@paramsiteid

*@paramloginid

*@parampasswd

*@returnUserResult

*/

publicUserResultvalidate(Stringsiteid,Stringloginid,Stringpasswd);

/**

*根据siteid和loginid查询对应的userid

*@paramsiteid

*@paramloginid

*@returnUserResult

*/

publicUserResultgetUserIdByLongId(Stringsiteid,Stringloginid);

/**

*根据userid查询对应的longid(siteid和loginid)

*@paramuserid

*@returnLongIdResult,包含:

*1、一个String类型的siteid

*2、一个String类型的loginid

*3、一个int类型code,表明状态

*/

publicLongIdResultgetLongIdByUserId(Stringuserid);

}

4.1.1.2免登录模块

1.TokenService内部接口

/**

*目标URL的白名单校验

*@paramtoURL–目标地址

*/

privatebooleanvalidateURL(StringtoURL);

/**

*生成token,sign并存入MemCached

*@paramip–发起端ip

*@paramref–发起端具体url地址

*@paramsite–网站标识

*@paramtoURL–目标端url

*@returnMap–null则失败,否则返回(token:

xxxx,sign:

xxx)

*/

privateMapgenerateAndSaveToken(Stringip,Stringref,Stringsite,StringtoURL,Stringsign)

/**

*删除token从MemCached

*@paramtoURL–目标地址

*/

privatebooleandeleteToken(Stringtoken);

4.1.2外部接口设计

4.1.2.1对外提供的接口

4.1.2.1.1UDB模块

4.1.2.1.2免登录模块

TokenService提供以下2个REST接口服务:

publicinterfaceITokenService{

/**

*

校验目标URL

*

生成并保存Token

*@returnTgResult

*/

publicTgResultgenerateTvsURL(StringloginId,Stringsite,StringtoURL,Stringref,Stringip);

 

/**

*根据传入token,ip,ref校验正确性,传入token在MemCache查询各个参数,再进行参数比对.

*@paramtoken

*@paramsign

*@paramip

*@paramref

*@returnTvResult

*/

publicTvResultvalidate(Stringtoken,Stringip,Stringref,Stringsign);

}

4.1.2.2需要依赖的外部接口

4.1.2.2.1CCBU/ICBU需提供的接口

⏹获取用户资料

⏹注册用户

⏹密码验证

⏹判断用户名

4.1.2.3接口返回结果的设计

TgResult对象设计

publicclassTgResult{

publicfinalstaticintSUCCESS=0;

publicfinalstaticintINVALID_TOURL=1;

publicfinalstaticintMEMCACHED_COMMUNICATED_ERROR=2;

publicfinalstaticintINVALID_TVS_URL=3;

privateintresultCode;

privateStringtvsURL;

privateStringmessage;

publicintgetResultCode(){

returnresultCode;

}

publicvoidsetResultCode(intresultCode){

this.resultCode=resultCode;

}

publicStringgetTvsURL(){

returntvsURL;

}

publicvoidsetTvsURL(StringtvsURL){

this.tvsURL=tvsURL;

}

publicStringgetMessage(){

returnmessage;

}

publicvoidsetMessage(Stringmessage){

this.message=message;

}

}

TvResult对象设计

publicclassTvResult{

publicfinalstaticintSUCCESS=0;

publicfinalstaticintINVALID_IP=1;

publicfinalstaticintINVALID_REF=2;

publicfinalstaticintINVALID_TOKEN=3;

publicfinalstaticintINVALID_SIGN=4;

publicfinalstaticintMEMCACHED_COMMUNICATED_ERROR=5;

privateintresultCode;

privateStringloginId;

privateStringsite;

privateStringtoURL;

privateStringmessage;

publicintgetResultCode(){

returnresultCode;

}

publicvoidsetResultCode(intresultCode){

this.resultCode=resultCode;

}

publicStringgetLoginId(){

returnloginId;

}

publicvoidsetLoginId(StringloginId){

this.loginId=loginId;

}

publicStringgetSite(){

returnsite;

}

publicvoidsetSite(Stringsite){

this.site=site;

}

publicStringgetToURL(){

returntoURL;

}

publicvoidsetToURL(StringtoURL){

this.toURL=toURL;

}

publicStringgetMessage(){

returnmessage;

}

publicvoidsetMessage(Stringmessage){

this.message=message;

}

}

AuthCookie对象设计

publicclassAuthCookie{

privateStringsiteId;

privateStringloginId;

privateStringuserId;

publicintgetSiteId(){

returnsiteId;

}

publicStringgetLoginId(){

returnloginId;

}

publicStringgetUserId(){

returnuserId;

}

}

UserResult对象设计

publicclassUserResult{

privateintcode;

privateStringuserId;

publicStringgetCode(){

returncode;

}

publicStringgetUserId(){

returnuserId;

}

}

LongIdResult对象设计

publicclassLongIdResult{

privateStringcode;

privateStringsiteId;

privateStringloginId;

publicStringgetCode(){

returncode;

}

publicStringgetSiteId(){

returnuserId;

}

publicStringgetLoginId(){

returnloginId;

}

}

4.2数据迁移

4.2.1数据迁移说明

在系统上线之前,需要将原udb的数据库中的userid和longid的对应关系导入到新的数据表中,以便新系统调用。

4.2.2方案描述

将udb这张表中的两列字段迁移到udb的新表中即可,忽略原有的udb_user_binding关系,存在userid的一对多的对因关系,新的udb中不记录userid和longid的一对多关系,仅保存唯一对应关系。

4.2.3数据库设计

数据表仅保留userid和longid的唯一对应关系,数据库表设计如下:

字段

●USER_ID:

PKvarchar2(20)

●SITE_ID:

varchar2(16)

●LOGIN_ID:

varchar2(64)

4.3缓存设计

4.3.1采用技术

缓存采用memCached内存数据库

4.3.2详细方案

1.第3方jar依赖:

用户免登采用memCached的client&server端。

2.cache存储结构设计:

key:

token

value:

{

“userid”:

xxx,

”site”:

xxx,

”token”:

xxx,

”toURL”:

xxx,

”ref”:

xxx,

”ip”:

xxx,

”sign”:

xxx

}

4.4安全级别设计

1.用户browser请求CCBU/ICBU/ITBU流程都走https加密传输过程.

2.增加toURL参数白名单校验。

3.增加srcSite参数校验。

4.token有有效时间,例如token的有效时间是10秒(时间可配置),10秒之后才来校验该token返回失败。

5.签名机制,对所有传参做签名。

6.token一次有效性:

即token被使用(验证)过一次之后,以后再也没用了。

每当validate动作触发并校验成功后token被删除。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1