分享
 
 
 

统一身份认证子系统界面设计与实现

王朝c#·作者佚名  2006-12-17
窄屏简体版  字體: |||超大  

目 录

一 引言 …………………………………………………………………1

二 需求分析……………………………………………………………..2

三 总体设计……………………………………………………………..2

四 用户界面设计………………………………………………………..4

五 具体实现……………………………………………………………..9

六 小结与致谢………………………………………………………….10

主要参考文献…………………………………………………………...11

附录 ……….…………………………………………………………..11

统一身份认证子系统界面设计与实现

周玲玲

西南师范大学计算机与信息科学学院 重庆 400715

摘要:统一身份认证子系统(UIA子系统)统一管理用户和校园内各个分管理系统(成员站点)。该论文主要阐述了该子系统的需求分析和总体设计。具体介绍了统一身份认证子系统中用户服务,成员站点服务,UIA子系统管理各个页面的功能和设计实现,并对页面间的跳转关系进行了详细的描述。阐述了统一登录窗体的设计思想和实现方案。

关键词:用户 用户站点 用户角色 统一登录窗体 登录按钮 退出按钮

Abstract :Unique Identity Authentication system (UIA ) manage user and campus each in charge of speaking to the system (member site ) in unison. This thesis has explained mainly that the demand for this subsystem and overall design. Unifying the user service in the authentication subsystem of the identity in concrete introduction, member's website serves, UIA system management each function and design of page realize, and it goes on detailed description to transfer the registration of Party membership, etc. from one unit to another to jump page. Have explained the design philosophy of unifying body of log-in window and realized the scheme.

Key word: user member's website user role Unify the body of log-in window Log-in presses the button Withdraw from the button

一、引言

对于校园内部的各个应用系统,用户使用时必须在每个系统中都注册,登录,比较麻烦,同时也容易造成混乱,更带来数据资源的重复存储。因此需要一个专门的系统对用户进行统一管理,即用户只需要注册登录一次就可以使用各不同应用系统。当然对于各个不同的应用系统,为了用户的使用方便,也对其进行一个逻辑上的统一管理。因此开发UIA(统一身份认证)子系统是很有必要的。当应用系统注册到在UIA后,我们称之为成员站点。

对用户的统一管理,一方面用在访问各个成员站点时无需多次注册登录,既给用户的使用带来方便,也为成员站点节约资源,避免各个成员站点分散管理统一用户带来的数据冗余。另一方面也给新的成员站点(新的应用系统)的开发提供方便。

对成员站点进行统一管理,一方面给用户的操作带来方便,即用户登录UIA子系统后就可以直接通过链接对各成员站点进行访问。另一方面对于成员站点只需要在该系统中注册时给出不同用户的权限类型,便可对各类用户进行权限控制,由该系统完成对用户的权限分配。因此开发UIA子系统(统一身份认证子系统),由小组讨论完成需求分析和总体设计(模块划分)中部分工作,我主要负责用户界面设计和具体实现.

二 、需求分析

(一)系统功能要求

UIA子系统要实现两大功能,一是对用户和系统的身份认证,二是对用户与成员站点之间的权限控制。通过用户的身份和成员站点对用户的权限分配用户可在该系统中获得访问某成员站点的权限,通过系统的身份和用户对成员站点的权限控制,成员站点可在该系统中获得察看用户信息的权限。

(二)系统性能要求

UIA子系统将会管理海量的用户和成员站点信息,这对UIA子系统的性能要求很高,同时多网络的性能要求也很高,所以要求UIA子系统首先要有容量很大的存储设备,同时要求有较大的带宽,保证大量用户在访问时不会发生网络阻塞。

(三)运行环境要求

.net平台,SQLSERVER数据库,IIS服务器

三 、总体设计

(一)UIA子系统模块划分

统一身份认证子系统(UIA)主要有两大功能模块:身份认证模块和权限管理模块。

身份认证模块管理用户身份和成员站点身份。向用户提供在线注册功能,用户注册时提供必须信息(如用户名、密码)该信息即为用户身份的唯一证据,拥有该信息的用户即为UIA子系统的合法用户;身份认证模块还向成员站点提供在线注册功能,成员站点注册时需提供一些关于成员站点的基本信息,还包括为用户定义的角色种类(如普通用户、高级用户、管理员用户)。

权限管理模块主要有:成员站点对用户的权限控制、用户对成员站点的权限控制、成员站点对成员站点的权限控制。用户向某成员站点申请分配权限时,需向该成员站点提供他的某些信息,这些信息就是用户提供给成员站点的权限,而成员站点通过UIA身份认证后就可以查询用户信息,并给该用户分配权限,获得权限的用户通过UIA身份认证后就可以以某种身份访问该成员站点。成员站点对成员站点的权限控制主要是成员站点控制向其它成员站点提供的调用接口。

UIA还包括系统维护模块和使用帮助模块,系统维护模块主要功能是成员站点的管理和对系统数据的维护。

UIA还提供一套SDK,供各成员站点开发时使用。如用户访问某成员站点时,UIA提供返回用户权限的函数,供成员站点调用。

(二)设计思想及结构层次图

1.系统总体设计思想描述如下:

用户可以进行单击登录,也就是用户通过UIA子系统的身份认证后,就可以访问UIA子系统的所有的该用户拥有权限的成员站点,用户在访问完一个站点后,不需要再次通过认证就可以访问他拥有权限的站点,同时向成员站点返回他相应的访问权限;集中式授权控制是用户向成员站点申请授权,用户在向站点申请权限时,提供想让站点看到的信息,即向成员站点申请授权;成员站点也向用户授权,用户向站点申请权限后,站点就可以为该用户开通,用户就获得了在该站点的权限;还为成员站点提供管理功能,包括管理其基本信息和其成员用户的权限,包括为用户开通权限,禁用用户的权限。

2.整个系统结构层次关系描述图:

主要说明了在开发时所用的开发模式:.net层次化开发,也就是Microsoft推荐的开发方式。主体部分主要有三个层:商务逻辑层、商务外观层、数据库访问层。其中商务外观层主要定义一些基本的操作,可以调用商务逻辑层,也可以调用数据库访问层和Model层,商务逻辑层主要是定义一些操作的规则,可以调用数据库访问层和Model层,数据库访问层主要是具体的对数据库的操作,可以调用Model层,通过这种层层调用来实现系统的主体功能;WebService层可以调用商务逻辑层,数据库访问层和Model层,WebUI主要是提供给用户的界面,体现系统的实际功能,可以访问商务外观层和Model层,Model层主要功能是实现层间的数据传递,可以被其他层调用。采用这种开发方式主要是有利于系统的维护和今后的系统扩展,如果某一层出现问题或需要更新某一层的功能,只需要修改相应的那一层,不需要修改其他层,这样就可以问题局部化,便于解决问题。

四 、用户界面设计:

根据统一身份认证系统的功能和应用,设计的用户界面主要包括三个页面:用户服务,成员站点服务,UIA系统管理。页面关系图如下:

如图,用户首先进入默认页面。默认页面包括三个链接:用户服务,成员站点服务,UIA系统管理。默认页面是信息发布的主页面,用户可以根据需要点击相应的链接,就可以链接到相应的页面进行操作。为了有利于用户操作和使用,这三个页面的链接都设置在主导航条中,因此在所有的页面中都可以切换到其它任意一个页面。

对于有些操作用户必须先登录,若用户没有登录就直接点击需要进行操作的页面链接时,系统会直接跳出统一登录提示页面。从该页面用户可以直接登录或申请统一身份进行登录。为了方便用户进行操作,在页面间运用了参数传递,当用户登录后,直接返回到因未登录而被中断访问的页面。

下面具体介绍各个页面:

(一)用户服务页面userservice.aspx

用户服务页面包括修改信息,获取帮助,申请注册,查看信息这四个子类别。该页面如下图所示:

用户可以选择页面中任何一个链接操作,如修改密码,操作成功后,就可以按“继续”按钮返回到用户服务页面。然后继续进行其它操作。

1. 修改信息类

该类提供了修改个人信息的服务,通过它们用户可以链接到修改密码,修改机密问题,修改Email地址,注销用户统一身份等四个子页面。这四个链接都是并列关系,操作过程都非常相似.下面就具体介绍一下“修改密码”这个链接:

用户点击“修改密码”链接到changepassword.aspx子页面,在进入该页面之前用户必须先登录到本系统,否则系统便会自动跳转到统一登录页面,让用户注册或登录,用户登录完成后,系统自动跳转到修改密码子页面.用户需要输入旧密码,新密码和确认新密码等信息。系统确认后,用户可以返回到用户服务页面选择其它服务。

2. 获取帮助类

该类为已经注册过的用户提供找回丢失密码的服务。通过它用户可以直接链接到找回我的密码(findpassword.aspx)子页面。用户需要输入用户名,密码提示问题,答案信息,就可以帮助用户找回丢失的密码。因为是找回密码,所以在该操作中用户不需要登录即可进行。

3. 申请注册

该类为新用户提供申请统一身份和申请成员站点的角色服务。下面具体介绍申请统一身份页面:

用户点击申请统一身份链接到userreg.aspx页面。用户需要输入用户名,密码,确认密码,Email,密码提示问题,答案等信息,用户记住密码的同时仍然需要记住密码提示问题和答案,以便忘记密码时找回自己的密码.新用户注册时,如果输入的用户名已存在,则系统给出提示信息,注册不成功,用户需重新注册;否则系统反馈注册成功信息,系统返回到登录页面。

4. 查看信息

用户可以查看自己的UUID,自己的身份是否激活,自己的角色是否激活信息。用户进行查看信息操作前必须先登录,否则系统同样跳转到统一登录界面.用户点击需要查看的链接后,系统即反馈相应的查看结果,用户点击继续按钮后即可以返回到useservise,asp页面。

(二)成员站点服务页面

成员站点服务页面中各个子页面关系图:

成员站点服务页面包括修改我的站点信息,管理站点中用户的信息,申请成为新的成员站点,查看系统USID等四个链接。该页面显示如下:

点击“修改我的站点信息”链接到changesite。asp页面,用户可以修改其信息,如果用户尚未登录,系统将自动跳到登录页面,待用户以站点管理员角色登录后,系统将返回到该页面,用户方能进行修改操作。

点击“ 管理站点中用户的信息”链接到rolmgraspx页面,站点管理员可以在该页面管理站点中的用户信息,如启用,禁用,删除该站点中的用户。

点击“申请成为新的成员站点”链接到sitereg.asp页面,用户在该页面中输入相关的正确的注册信息后,系统就返回注册成功信息。否则返回注册失败信息,用户可以重新申请。

点击“ 查看我的站点的USID”链接到viewusid.aspx页面,用户可以从该页面中获取站点的USID.

(三)UIA系统管理页面

UIA关系管理页面中各子页面关系图:

UIA系统管理主要管理UIA中的用户和成员站点,因此该页面就包括管理UIA中的用户, 管理UIA中的成员站点两个链接.UIA系统管理页面如下图:

用户可以点击“ 管理UIA中的用户”链接到管理UIA中的用户子页面(usermgr.aspx).管理员可以从这个页面获取任何一个该系统用户的信息,如用户名,UUID,编号等信息,管理用户是否被启用.

用户可以点击“ 管理UIA中的成员站点”链接到管理UIA中的成员站点子页面(sitemgr.aspx)。UIA的系统管理员可以从这个页面管理UIA中注册的成员站点。

登录按钮、安全退出按钮和用户统一登录窗体如下:

用户点击“登录”按钮后,就会出现统一登录窗口。

用户只需输入用户名和密码就可以登录该系统。

此页面还提供了给用户“自动登录”和“我使用的是公共计算机”两个功能选项以及申请统一身份,申请角色,申请成员站点的连接.用户可以直接从登录页面获得这些服务.如果用户输入错误的密码时,系统将不反馈登录成功的信息,而是自动清楚错误密码,让用户重新输入密码。

自动登录功能选项:用户选择以后,就可以直接登录到其他子系统,而不需要再次输入用户名和密码,节约用户时间,增强用户的登录体验。

我使用的是公共计算机功能选项:用户选择该选项后,用户退出系统后,系统将不保留用户登录信息, 防止其他用户盗用该用户的用户名和密码,提高系统的安全性。

当用户成功登录后,登录按钮就自动变化为安全退出按钮。用户只须点击此按钮即可安全退出登录。

五 、具体实现

本系统的界面设计主要运用的是Microsoft公司的VisualStudio.Net2003中提供的asp.net,它是一种将各种Web元素组合在一起的服务器技术,是一个统一的Web开发平台。它提供了生成一个完整的Web应用程序所必需的各种服务.ASP.NET是一个已编译的,基于.NET的环境,可以使用任何与.NET兼容的语言(包括Visual Basic.NET,C#和Jscript.NET)来创建相应的应用程序。运用它可以建立强大的Web应用。它提供给用户以下一些特征:

1.它可以选择任何一种可用的.NET程序设计语言。

2.提供了HTML 和WEB两种服务器控件,增加了方法、事件驱动能力,实现HTML代码与程序的分离,便于修改和阅读。

3.采用了Code behind技术,使得界面设计与程序设计分开,便于代码的重复使用,利于程序调试和维护,提高了程序的安全性。

在网页设计部分,主要运用asp.net中提供的丰富的控件,根据系统规划和系统分析合理地布局;在程序设计部分,运用程序设计语言C#来实现对控件的控制和响应及部分控件与数据库中数据的绑定。

主要应用的控件有Button控件, HyperLink控件和CheckBox 控件等。

Button控件的语法如下:

<asp:Button id=“theButton”

Text=“dispname” //Text表示在按钮上所显示的标题

CommandName=“command”// CommandName用来设置与Button控件相关联的命令名,该属性可以用来在编程中判断所点击的是哪个按钮,从而执行相应的操作

CommandArgument=“theargument”// CommandArgument用来设置与CommandName属性相关联的参数,该属性与CommandName一起被传递到Command事件中

CauseValidation=“ture/false” //CauseValidation表示在单击Button控件是是否执行验证

OnClick=“OnClinkMethod”

Runat=“server”/>

HyperLink控件和CheckBox 控件其功能HTML语言中HyperLink功能类似,语法也非常类似,这里就不赘述。

用户页面实现的部分代码参见附录。

六、小结与致谢

通过小组各成员的共同努力,统一身份认证子系统基本成型,系统功能基本实现。此次毕业设计让我对软件开发的过程有了更加深入的了解,从中我不仅对.NET技术有了一定的了解,学会了C#,ASP.NET编程,而且能够编写简单的用户界面程序。这是我的收获之一,但更让我深深的感动的是,小组成员之间的团结协作,共同劳动,彼此学习,互相帮助共同朝着实现本系统的目标努力的精神,它让我学会了如何工作,如何与人协调。通过自身的努力,我虽然取得了一定成绩,但同时也发现了许多不足,知识的欠缺以及动手能力的缺乏。这次毕业设计给了我一个踏上工作岗位之前的弥补机会。总之,本次毕业设计让我有了一个更充分了解自己的机会,丰富了自己的工作经验。

由于个人能力有限,时间仓促,用户界面还存在许多不足之处,我将利用剩余时间继续完善界面设计及其功能,并希望各位老师不吝赐教!

这次毕业设计能够顺利完成离不开指导老师邹显春老师、卢心红老师对我的指导和帮助,闻晓等老师也在此过程中给予了极大的帮助,在此对他们表示衷心的感谢!同时我还要感谢小组所有成员对我的支持与帮助!谢谢!

参考文献:

[1]肖建.ASP.NET编程实例与技巧集粹.北京希望电子出版社,2003.23-60

[2]王惠刚,王挺. ASP.NET实用培训教程. 北京希望电子出版社,2003.29-60.101-128

[3] Wright .C#编程技术与技巧.机械工业出版社,2002.41-111.417-447

附录:

申请成员站点页面sitereg.aspx的部分代码:

using Model;

using BusinessFacade;

namespace WebUI

{

public class sitereg : System.Web.UI.Page

{

protected System.Web.UI.WebControls.Label Label1;

protected System.Web.UI.WebControls.TextBox TextBox1;

protected System.Web.UI.WebControls.TextBox TextBox2;

protected System.Web.UI.WebControls.Label Label2;

protected System.Web.UI.WebControls.TextBox TextBox3;

protected System.Web.UI.WebControls.Label Label3;

protected System.Web.UI.WebControls.Button Button1;

protected System.Web.UI.WebControls.ListBox ListBox1;

protected System.Web.UI.WebControls.Label Label4;

protected System.Web.UI.WebControls.Button Button2;

protected System.Web.UI.WebControls.DropDownList DropDownList1;

protected System.Web.UI.WebControls.Panel Panel1;

protected System.Web.UI.WebControls.Panel Panel2;

protected System.Web.UI.WebControls.Button Button3;

protected System.Web.UI.WebControls.Label Label5;

protected System.Web.UI.WebControls.Label Label7;

private SiteData site=null;

private void Page_Load(object sender, System.EventArgs e)

{

//确保将UserData类型的变量放在Session中,便于在页面刷新时保存此变量

if(this.Page.Session["SiteData"]==null)

this.Page.Session["SiteData"]=new SiteData();

//从Session中取出UserData

site=(SiteData)this.Page.Session["SiteData"];

// 在此处放置用户代码以初始化页面

{

//将站点角色绑定到ListBox1中

ListBox1.DataSource=site.Roles;

ListBox1.DataTextField="RoleName";

ListBox1.DataValueField="RoleID";

//将站点角色绑定到DropDownList1

DropDownList1.DataSource=site.Roles;

DropDownList1.DataTextField="RoleName";

DropDownList1.DataValueField="RoleID";

//执行绑定

DataBind();

}

}

#region Web 窗体设计器生成的代码

override protected void OnInit(EventArgs e)

{

InitializeComponent();

base.OnInit(e);

}

/// <summary>

/// 设计器支持所需的方法 - 不要使用代码编辑器修改

/// 此方法的内容。

/// </summary>

private void InitializeComponent()

{

this.Button1.Click += new System.EventHandler(this.Button1_Click);

this.DropDownList1.SelectedIndexChanged += new System.EventHandler(this.DropDownList1_SelectedIndexChanged);

this.Button2.Click += new System.EventHandler(this.Button2_Click);

this.Button3.Click += new System.EventHandler(this.Button3_Click);

this.Load += new System.EventHandler(this.Page_Load);

}

#endregion

private void Button1_Click(object sender, System.EventArgs e)

{

//向站点角色中添加新的角色

site.Roles.Add(new SiteData.Role(TextBox3.Text.Trim()));

TextBox3.Text="";

DataBind();

}

private void Button2_Click(object sender, System.EventArgs e)

{

site.SiteName=TextBox1.Text.Trim();

site.Url=TextBox2.Text.Trim();

//调用BusinessFacade层的服务完成站点注册

if(new SiteSystem().CreateSite(site) )

{

Panel2.Visible=false;

Panel1.Visible=true;

Label7.Text=site.USID.ToString();

}

}

private void DropDownList1_SelectedIndexChanged(object sender, System.EventArgs e)

{

//初始化站点的管理员角色

//DropDownList1.SelectedItem).CanAdminSite=true;

}

private void Button3_Click(object sender, System.EventArgs e)

{

//注册完成,重定向到siteservice.aspx页面

Response.Redirect("siteservice.aspx",true);

}

}

}

统一登录窗体控件Login.ascx的部分代码:

namespace WebUI.modules

{

public class Login : System.Web.UI.UserControl

{

protected System.Web.UI.WebControls.Panel Panel1;

protected System.Web.UI.WebControls.CheckBox CheckBox2;

protected System.Web.UI.WebControls.LinkButton LinkButton1;

protected System.Web.UI.WebControls.HyperLink HyperLink1;

protected System.Web.UI.WebControls.HyperLink HyperLink2;

protected System.Web.UI.WebControls.Label Label1;

protected System.Web.UI.WebControls.TextBox TextBox1;

protected System.Web.UI.WebControls.Label Label2;

protected System.Web.UI.WebControls.TextBox TextBox2;

protected System.Web.UI.WebControls.CheckBox CheckBox1;

protected System.Web.UI.WebControls.HyperLink HyperLink3;

protected System.Web.UI.WebControls.Button Button1;

private void Page_Load(object sender, System.EventArgs e)

{

}

#region Web 窗体设计器生成的代码

override protected void OnInit(EventArgs e)

{

InitializeComponent();

base.OnInit(e);

}

/// <summary>

/// 设计器支持所需的方法 - 不要使用代码编辑器

/// 修改此方法的内容。

/// </summary>

private void InitializeComponent()

{

this.Button1.Click += new System.EventHandler(this.Button1_Click);

this.Load += new System.EventHandler(this.Page_Load);

}

#endregion

private void Button1_Click(object sender, System.EventArgs e)

{

//对参数进行规范化处理,去掉多余的空格

string nickname=TextBox1.Text.Trim();

string password=TextBox2.Text.Trim();

//调用UIA的WebService来完成用户身份验证

if(new BusinessFacade.UserSystem().CheckUser(nickname,password))

{

//将登录用户的信息加入到Session中

Model.UserData user=null;

user=new BusinessFacade.UserSystem().GetUser(nickname);

this.Session["User"]=user;

//创建身份验证票

FormsAuthenticationTicket Ticket = new FormsAuthenticationTicket (1,nickname,DateTime.Now, DateTime.Now.AddMinutes(30), false,"","/") ;

string HashTicket = FormsAuthentication.Encrypt (Ticket);

HttpCookie UserCookie = new HttpCookie(FormsAuthentication.FormsCookieName, HashTicket);

//添加到Cookies中

Response.Cookies.Add(UserCookie);

//跳转到适当的页面

if(this.Session["ReturnURL"]!=null)

Response.Redirect (this.Session["ReturnURL"].ToString(),true);

else Response.Redirect ("default.aspx",true);

}

}

}

}

页面安全控制控件CheckUser.ascx的部分代码:

namespace WebUI.modules

{

public class CheckUser : System.Web.UI.UserControl

{

private void Page_Load(object sender, System.EventArgs e)

{

}

#region Web 窗体设计器生成的代码

override protected void OnInit(EventArgs e)

{

//没有任何显示页面的控件,需要安全认证的页面只要包含这个控件就可以了

//判断页面是否通过验证,若没有通过就跳转到login.aspx页面。

if(this.Page.User.Identity.IsAuthenticated==false)

Response.Redirect("login.aspx",true);

if(this.Page.Session["User"]==null)

Response.Redirect("login.aspx",true);

InitializeComponent();

base.OnInit(e);

}

/// <summary>

/// 设计器支持所需的方法 - 不要使用代码编辑器

/// 修改此方法的内容。

/// </summary>

private void InitializeComponent()

{

this.Load += new System.EventHandler(this.Page_Load);

}

#endregion

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有