一种单点登录方法、服务端及系统转让专利

申请号 : CN201810418404.0

文献号 : CN108683651B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 孟凡龙张永皋袁也程永明于德江高申申

申请人 : 浪潮云信息技术股份公司

摘要 :

本发明提供了一种单点登录方法、服务端及系统,包括:预先搭建数据库Redis;当接收到外部Web客户端发送的首次访问请求时,生成会话session和带有session的cookie;将cookie和首次访问请求对应的回执数据发送给Web客户端,以使外部Web客户端存储cookie和将回执数据展示给用户;利用开源框架spring将session存储到Redis中;当接收到外部Web客户端发送的再次访问请求和cookie时,利用spring确定Redis中是否存在与cookie对应的session;如果是,利用与cookie对应的session访问再次访问请求对应的请求数据;将请求数据发送给外部Web客户端,以使通过所述外部Web客户端将所述请求数据展示给所述用户。本方案能够实现相同父级域名下不同子域名网站的单点登录。

权利要求 :

1.一种单点登录方法,其特征在于,应用于服务端,包括:

预先搭建数据库Redis;

当接收到外部Web客户端发送的首次访问请求时,生成会话session和带有所述session的cookie;

将所述cookie和所述首次访问请求对应的回执数据发送给所述Web客户端,以使所述外部Web客户端存储所述cookie和将所述回执数据展示给用户,其中,所述cookie的domain参数为所述回执数据对应的父级域名,路径为所述cookie的相对路径,属性名称为共享的属性值;

利用开源框架spring将所述session存储到所述Redis中;

当接收到所述外部Web客户端发送的再次访问请求和所述cookie时,利用所述spring确定所述Redis中是否存在与所述cookie对应的session;

如果是,利用与所述cookie对应的session访问所述再次访问请求对应的请求数据;

将请求数据发送给所述外部Web客户端,以使通过所述外部Web客户端将所述请求数据展示给所述用户;

在所述预先搭建数据库Redis之后,在所述利用所述spring确定所述Redis中是否存在与所述cookie对应的session之前,进一步包括:预先在所述Redis中设置访问所述Redis的身份信息,其中,所述身份信息,包括端口和密码;

预先在所述spring中存储所述Redis的待验证访问信息,其中,所述待验证访问信息,包括所述Redis的待验证访问地址、所述Redis的待验证端口和所述Redis的待验证密码;

利用所述spring中的spring-data-redis组件确定所述待验证访问信息是否与所述身份信息一致,如果是,执行所述利用所述spring确定所述Redis中是否存在与所述cookie对应的session;

所述session,包括sessionid;

所述利用所述spring确定所述Redis中是否存在与所述cookie对应的session,包括:利用所述spring-session解析所述cookie,获得所述cookie中的sessionid;

利用所述spring-session确定所述Redis中是否存在与所述cookie中的sessionid相同的sessionid;

如果是,利用所述spring-session确定所述Redis中是否存在与所述cookie中的sessionid相对应的session;

所述利用与所述cookie对应的session访问所述再次访问请求对应的请求数据,包括:利用与所述cookie中的sessionid相对应的session访问所述再次访问请求对应的请求数据;

所述利用与所述cookie中的sessionid相对应的session访问所述再次访问请求对应的请求数据,包括:提取与所述cookie中的sessionid相对应的session中的登录信息,其中,所述登录信息,包括用户名和所述用户名对应的密码;

利用所述登录信息访问所述再次访问请求对应的请求数据;

在所述预先搭建数据库Redis之后,在所述生成会话session和带有所述session的cookie之前,进一步包括:在所述spring的配置文件中配置所述Redis的连接池;

在所述连接池中建立Redis连接;

在所述生成会话session和带有所述session的cookie之后,进一步包括:获取所述连接池中的所述Redis连接,并执行所述利用开源框架spring将所述session存储到所述Redis中。

2.一种服务端,其特征在于,包括:

搭建模块,用于预先搭建数据库Redis;

信息处理器,用于当接收到外部Web客户端发送的首次访问请求时,生成会话session和带有所述session的cookie;将所述cookie和所述首次访问请求对应的回执数据发送给所述Web客户端,以使所述外部Web客户端存储所述cookie和将所述回执数据展示给用户,其中,所述cookie的domain参数为所述回执数据对应的父级域名,路径为所述cookie的相对路径,属性名称为共享的属性值;将Web服务器访问的请求数据发送给所述外部Web客户端,以使通过所述外部Web客户端将所述请求数据展示给所述用户;

Web服务器,用于利用开源框架spring将所述信息处理器生成的所述session存储到所述搭建模块搭建的所述Redis中;当所述信息处理器接收到所述外部Web客户端发送的再次访问请求和所述cookie时,利用所述spring确定所述Redis中是否存在与所述cookie对应的session;如果是,利用与所述cookie对应的session访问所述再次访问请求对应的请求数据;

所述Web服务器,进一步用于预先在所述Redis中设置访问所述Redis的身份信息,其中,所述身份信息,包括端口和密码;预先在所述spring中存储所述Redis的待验证访问信息,其中,所述待验证访问信息,包括所述Redis的待验证访问地址、所述Redis的待验证端口和所述Redis的待验证密码;利用所述spring中的spring-data-redis组件确定所述待验证访问信息是否与所述身份信息一致,如果是,执行所述利用所述spring确定所述Redis中是否存在与所述cookie对应的session;

所述session,包括sessionid;

所述Web服务器,用于利用所述spring-session解析所述cookie,获得所述cookie中的sessionid;利用所述spring-session确定所述Redis中是否存在与所述cookie中的sessionid相同的sessionid;如果是,利用所述spring-session确定所述Redis中是否存在与所述cookie中的sessionid相对应的session;利用与所述cookie中的sessionid相对应的session访问所述再次访问请求对应的请求数据;

所述Web服务器,用于提取与所述cookie中的sessionid相对应的session中的登录信息,其中,所述登录信息,包括用户名和所述用户名对应的密码;

利用所述登录信息访问所述再次访问请求对应的请求数据。

说明书 :

一种单点登录方法、服务端及系统

技术领域

[0001] 本发明涉及计算机技术领域,特别涉及一种单点登录方法、服务端及系统。

背景技术

[0002] 随着互联网技术的发展,企业的服务业务也在不断的增加,如何避免用户在访问同一父级域名下的不同子域名时多次注册登录,已经成为各个企业关注的重点。
[0003] 目前,用户在访问子域名A时,如需从子域名A中访问与子域名A相同父级域名的子域名B时,则需要先登录子域名B再进行访问。
[0004] 综上可见,用户在访问相同父级域名下不同子域名网站时,无法实现单点登录,从而导致用户体验差。

发明内容

[0005] 本发明实施例提供了一种单点登录方法、服务端及系统,能够实现相同父级域名下不同子域名网站的单点登录。
[0006] 第一方面,本发明实施例提供了一种单点登录方法,应用于服务端,包括:
[0007] 预先搭建数据库Redis;
[0008] 当接收到外部Web客户端发送的首次访问请求时,生成会话session和带有所述session的cookie;
[0009] 将所述cookie和所述首次访问请求对应的回执数据发送给所述Web客户端,以使所述外部Web客户端存储所述cookie和将所述回执数据展示给用户,其中,所述cookie的domain参数为所述回执数据对应的父级域名,路径为所述cookie的相对路径,属性名称为共享的属性值;
[0010] 利用开源框架spring将所述session存储到所述Redis中;
[0011] 当接收到所述外部Web客户端发送的再次访问请求和所述cookie时,利用所述spring确定所述Redis中是否存在与所述cookie对应的session;
[0012] 如果是,利用与所述cookie对应的session访问所述再次访问请求对应的请求数据;
[0013] 将所述请求数据发送给所述外部Web客户端,以使通过所述外部Web客户端将所述请求数据展示给所述用户。
[0014] 优选地,在所述预先搭建数据库Redis之后,在所述利用所述spring确定所述Redis中是否存在与所述cookie对应的session之前,进一步包括:
[0015] 预先在所述Redis中设置访问所述Redis的身份信息,其中,所述身份信息,包括端口和密码;
[0016] 预先在所述spring中存储所述Redis的待验证访问信息,其中,所述待验证访问信息,包括所述Redis的待验证访问地址、所述Redis的待验证端口和所述Redis的待验证密码;
[0017] 利用所述spring中的spring-data-redis组件确定所述待验证访问信息是否与所述身份信息一致,如果是,执行所述利用所述spring确定所述Redis中是否存在与所述cookie对应的session。
[0018] 优选地,所述session,包括sessionid;
[0019] 所述利用所述spring确定所述Redis中是否存在与所述cookie对应的session,包括:
[0020] 利用所述spring-session解析所述cookie,获得所述cookie中的sessionid;
[0021] 利用所述spring-session确定所述Redis中是否存在与所述cookie中的sessionid相同的sessionid;
[0022] 如果是,利用所述spring-session确定所述Redis中是否存在与所述cookie中的sessionid相对应的session;
[0023] 所述利用与所述cookie对应的session访问所述再次访问请求对应的请求数据,包括:
[0024] 利用与所述cookie中的sessionid相对应的session访问所述再次访问请求对应的请求数据。
[0025] 优选地,所述利用与所述cookie中的sessionid相对应的session访问所述再次访问请求对应的请求数据,包括:
[0026] 提取与所述cookie中的sessionid相对应的session中的登录信息,其中,所述登录信息,包括用户名和所述用户名对应的密码;
[0027] 利用所述登录信息访问所述再次访问请求对应的请求数据。
[0028] 优选地,在所述预先搭建数据库Redis之后,在所述生成会话session和带有所述session的cookie之前,进一步包括:
[0029] 在所述spring的配置文件中配置所述Redis的连接池;
[0030] 在所述连接池中建立Redis连接;
[0031] 在所述生成会话session和带有所述session的cookie之后,进一步包括:
[0032] 获取所述连接池中的所述Redis连接,并执行所述利用开源框架spring将所述session存储到所述Redis中。
[0033] 第二方面,本发明实时例提供了一种服务端,包括:
[0034] 搭建模块,用于预先搭建数据库Redis;
[0035] 信息处理器,用于当接收到外部Web客户端发送的首次访问请求时,生成会话session和带有所述session的cookie;将所述cookie和所述首次访问请求对应的回执数据发送给所述Web客户端,以使所述外部Web客户端存储所述cookie和将所述回执数据展示给用户,其中,所述cookie的domain参数为所述回执数据对应的父级域名,路径为所述cookie的相对路径,属性名称为共享的属性值;将所述Web服务器访问的所述请求数据发送给所述外部Web客户端,以使通过所述外部Web客户端将所述请求数据展示给所述用户;
[0036] Web服务器,用于利用开源框架spring将所述信息处理器生成的所述session存储到所述搭建模块搭建的所述Redis中;当所述信息处理器接收到所述外部Web客户端发送的再次访问请求和所述cookie时,利用所述spring确定所述Redis中是否存在与所述cookie对应的session;如果是,利用与所述cookie对应的session访问所述再次访问请求对应的请求数据。
[0037] 优选地,所述Web服务器,进一步用于预先在所述Redis中设置访问所述Redis的身份信息,其中,所述身份信息,包括端口和密码;预先在所述spring中存储所述Redis的待验证访问信息,其中,所述待验证访问信息,包括所述Redis的待验证访问地址、所述Redis的待验证端口和所述Redis的待验证密码;利用所述spring中的spring-data-redis组件确定所述待验证访问信息是否与所述身份信息一致,如果是,执行所述利用所述spring确定所述Redis中是否存在与所述cookie对应的session。
[0038] 优选地,所述session,包括sessionid;
[0039] 所述Web服务器,用于利用所述spring-session解析所述cookie,获得所述cookie中的sessionid;利用所述spring-session确定所述Redis中是否存在与所述cookie中的sessionid相同的sessionid;如果是,利用所述spring-session确定所述Redis中是否存在与所述cookie中的sessionid相对应的session;利用与所述cookie中的sessionid相对应的session访问所述再次访问请求对应的请求数据。
[0040] 优选地,所述Web服务器,用于提取与所述cookie中的sessionid相对应的session中的登录信息,其中,所述登录信息,包括用户名和所述用户名对应的密码;利用所述登录信息访问所述再次访问请求对应的请求数据。
[0041] 第三方面,本发明实施例提供了一种单点登录系统,包括:至少一个Web客户端和第二方面中的服务端;
[0042] 所述Web客户端,用于将用户发送的首次访问请求转发给所述服务端,当接收到所述服务端根据所述首次访问请求发送的cookie和回执数据时,存储所述cookie,并将所述回执数据展示给所述用户;以及当接收到所述用户发送的再次访问请求时,将所述再次访问请求和所述cookie转发给所述服务端,当接收到所述服务端根据所述再次访问请求发送的请求数据时,将所述请求数据展示给所述用户。
[0043] 在本发明实施例中,当接收到Web客户端发送的首次访问请求而未接收到cookie时,需要生成session和带有session的cookie,并将session存储到Redis中,以使外部Web客户端可访问Redis以保证session的一致性,以及将cookie发送给Web客户端,以使在接收到Web客户端发送的再次访问请求和cookie时,可以根据cookie属性中的属性名称、路径以及domain参数的设定,从Redis中查找cookie对应的session,通过同一份session达到共享session的目的,实现在相同父级域名下不同子域名网站的单点登录的目的,进而提高用户的体验。

附图说明

[0044] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0045] 图1是本发明一实施例提供的一种单点登录方法的流程图;
[0046] 图2是本发明一实施例提供的一种服务端的结构示意图;
[0047] 图3是本发明一实施例提供的一种单点登录系统的结构示意图;
[0048] 图4是本发明一实施例提供的另一种单点登录系统的结构示意图。

具体实施方式

[0049] 为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0050] 如图1所示,本发明实施例提供了一种单点登录方法,应用于服务端,包括:
[0051] 步骤101:预先搭建数据库Redis;
[0052] 步骤102:当接收到外部Web客户端发送的首次访问请求时,生成会话session和带有所述session的cookie;
[0053] 步骤103:将所述cookie和所述首次访问请求对应的回执数据发送给所述Web客户端,以使所述外部Web客户端存储所述cookie和将所述回执数据展示给用户,其中,所述cookie的domain参数为所述回执数据对应的父级域名,路径为所述cookie的相对路径,属性名称为共享的属性值;
[0054] 步骤104:利用开源框架spring将所述session存储到所述Redis中;
[0055] 步骤105:当接收到所述外部Web客户端发送的再次访问请求和所述cookie时,利用所述spring确定所述Redis中是否存在与所述cookie对应的session;
[0056] 步骤106:如果是,利用与所述cookie对应的session访问所述再次访问请求对应的请求数据;
[0057] 步骤107:将所述请求数据发送给所述外部Web客户端,以使通过所述外部Web客户端将所述请求数据展示给所述用户。
[0058] 在本发明实施例中,当接收到Web客户端发送的首次访问请求而未接收到cookie时,需要生成session和带有session的cookie,并将session存储到Redis中,以使外部Web客户端可访问Redis以保证session的一致性,以及将cookie发送给Web客户端,以使在接收到Web客户端发送的再次访问请求和cookie时,可以根据cookie属性中的属性名称、路径以及domain参数的设定,从Redis中查找cookie对应的session,通过同一份session达到共享session的目的,实现在相同父级域名下不同子域名网站的单点登录的目的,进而提高用户的体验。
[0059] 可以理解的是,cookie的属性名称决定cookie可以供哪些请求访问到,domain属性决定运行访问cookie的域名,而路径属性决定允许访问cookie的路径,属性名称决定共享的是cookie的哪个属性值,通过cookie查找对应的session即可对父级域名相同,不同子域名的网站共享session,从而实现单点登录。
[0060] 在本发明一实施例中,在所述预先搭建数据库Redis之后,在所述利用所述spring确定所述Redis中是否存在与所述cookie对应的session之前,进一步包括:
[0061] 预先在所述Redis中设置访问所述Redis的身份信息,其中,所述身份信息,包括端口和密码;
[0062] 预先在所述spring中存储所述Redis的待验证访问信息,其中,所述待验证访问信息,包括所述Redis的待验证访问地址、所述Redis的待验证端口和所述Redis的待验证密码;
[0063] 利用所述spring中的spring-data-redis组件确定所述待验证访问信息是否与所述身份信息一致,如果是,执行所述利用所述spring确定所述Redis中是否存在与所述cookie对应的session。
[0064] 在本发明实施例中,为了提高Redis中存储的数据的安全性,spring在访问Redis之前需要先进行身份验证,即需要先在spring的配置文件中指定Redis的待验证访问信息,例如Redis的待验证访问地址、Redis的待验证端口和Redis的待验证密码,以使通过Redis的待验证访问地址查找Redis,并在找到后根据待验证端口和待验证密码获取Redis的信任,进而实现访问Redis的目的。
[0065] 在本发明一实施例中,所述session,包括sessionid;
[0066] 所述利用所述spring确定所述Redis中是否存在与所述cookie对应的session,包括:
[0067] 利用所述spring-session解析所述cookie,获得所述cookie中的sessionid;
[0068] 利用所述spring-session确定所述Redis中是否存在与所述cookie中的sessionid相同的sessionid;
[0069] 如果是,利用所述spring-session确定所述Redis中是否存在与所述cookie中的sessionid相对应的session;
[0070] 所述利用与所述cookie对应的session访问所述再次访问请求对应的请求数据,包括:
[0071] 利用与所述cookie中的sessionid相对应的session访问所述再次访问请求对应的请求数据。
[0072] 在本发明实施例中,在session中包括对应的sessionid,以使根据sessionid来确定唯一的session,在外部Web客户端与服务端进行会话的过程中,需要传递sessionid以验证用户的身份,即需要从cookie中解析出cookie中的sessionid,再从Redis中查找与cookie中的sessionid相同的sessionid进而完成身份验证,而在身份验证通过后,即可根据同一个sessionid从Redis中获取同一份session,进而达到共享session的目的。
[0073] 在本发明一实施例中,所述利用与所述cookie中的sessionid相对应的session访问所述再次访问请求对应的请求数据,包括:
[0074] 提取与所述cookie中的sessionid相对应的session中的登录信息,其中,所述登录信息,包括用户名和所述用户名对应的密码;
[0075] 利用所述登录信息访问所述再次访问请求对应的请求数据。
[0076] 在本发明实施例中,在确定与所述cookie中的sessionid相对应的session后,需要提取与所述cookie中的sessionid相对应的session中的登录信息,以使根据登录信息访问用户所需的请求数据,进而实现不同子域名共享session的目的。
[0077] 在本发明一实施例中,在所述预先搭建数据库Redis之后,在所述生成会话session和带有所述session的cookie之前,进一步包括:
[0078] 在所述spring的配置文件中配置所述Redis的连接池;
[0079] 在所述连接池中建立Redis连接;
[0080] 在所述生成会话session和带有所述session的cookie之后,进一步包括:
[0081] 获取所述连接池中的所述Redis连接,并执行所述利用开源框架spring将所述session存储到所述Redis中。
[0082] 在本发明实施例中,为了提高访问效率,预先在spring的配置文件中配置Redis的连接池,并在连接池中建立至少一个Redis与spring的Redis连接,以使在spring需要进行Redis的操作时,即可从连接池直接获取Redis连接,而无需现建立Redis连接,因此可以缩短建立Redis连接的时间,实现提高访问速度的目的。
[0083] 如图2所示,本发明实施例提供了一种服务端,包括:
[0084] 搭建模块201,用于预先搭建数据库Redis;
[0085] 信息处理器202,用于当接收到外部Web客户端发送的首次访问请求时,生成会话session和带有所述session的cookie;将所述cookie和所述首次访问请求对应的回执数据发送给所述Web客户端,以使所述外部Web客户端存储所述cookie和将所述回执数据展示给用户,其中,所述cookie的domain参数为所述回执数据对应的父级域名,路径为所述cookie的相对路径,属性名称为共享的属性值;将所述Web服务器访问的所述请求数据发送给所述外部Web客户端,以使通过所述外部Web客户端将所述请求数据展示给所述用户;
[0086] Web服务器203,用于利用开源框架spring将所述信息处理器生成的所述session存储到所述搭建模块201搭建的所述Redis中;当所述信息处理器202接收到所述外部Web客户端发送的再次访问请求和所述cookie时,利用所述spring确定所述Redis中是否存在与所述cookie对应的session;如果是,利用与所述cookie对应的session访问所述再次访问请求对应的请求数据。
[0087] 在本发明实施例中,当信息处理模块接收到外部Web客户端发送的首次访问请求而未接收到cookie时,需要生成session和带有session的cookie,并通过Web服务器将session存储到搭建模块搭建的Redis中,以使外部Web客户端可访问Redis以保证session的一致性,以及将cookie发送给Web客户端,以使在接收到外部Web客户端发送的再次访问请求和cookie时,可以根据cookie属性中的属性名称、路径以及domain参数的设定,从Redis中查找cookie对应的session,通过同一份session达到共享session的目的,实现在相同父级域名下不同子域名网站的单点登录的目的,进而提高用户的体验。
[0088] 在本发明一实施例中,所述Web服务器,进一步用于预先在所述Redis中设置访问所述Redis的身份信息,其中,所述身份信息,包括端口和密码;预先在所述spring中存储所述Redis的待验证访问信息,其中,所述待验证访问信息,包括所述Redis的待验证访问地址、所述Redis的待验证端口和所述Redis的待验证密码;利用所述spring中的spring-data-redis组件确定所述待验证访问信息是否与所述身份信息一致,如果是,执行所述利用所述spring确定所述Redis中是否存在与所述cookie对应的session。
[0089] 在本发明一实施例中,所述session,包括sessionid;
[0090] 所述Web服务器,用于利用所述spring-session解析所述cookie,获得所述cookie中的sessionid;利用所述spring-session确定所述Redis中是否存在与所述cookie中的sessionid相同的sessionid;如果是,利用所述spring-session确定所述Redis中是否存在与所述cookie中的sessionid相对应的session;利用与所述cookie中的sessionid相对应的session访问所述再次访问请求对应的请求数据。
[0091] 在本发明一实施例中,所述Web服务器,用于提取与所述cookie中的sessionid相对应的session中的登录信息,其中,所述登录信息,包括用户名和所述用户名对应的密码;利用所述登录信息访问所述再次访问请求对应的请求数据。
[0092] 如图3所示,本发明实施例提供了一种单点登录系统,包括至少一个Web客户端301和服务端302;
[0093] 所述Web客户端,用于将用户发送的首次访问请求转发给所述服务端,当接收到所述服务端根据所述首次访问请求发送的cookie和回执数据时,存储所述cookie,并将所述回执数据展示给所述用户;以及当接收到所述用户发送的再次访问请求时,将所述再次访问请求和所述cookie转发给所述服务端,当接收到所述服务端根据所述再次访问请求发送的请求数据时,将所述请求数据展示给所述用户。
[0094] 在本发明实施例中,当接收到外部Web客户端发送的首次访问请求而未接收到cookie时,需要生成session和带有session的cookie,并将session存储到Redis中,以使外部Web客户端可访问Redis以保证session的一致性,以及将cookie发送给外部Web客户端,以使在接收到外部Web客户端发送的再次访问请求和cookie时,可以根据cookie属性中的属性名称、路径以及domain参数的设定,从Redis中查找cookie对应的session,通过同一份session达到共享session的目的,实现在相同父级域名下不同子域名网站的单点登录的目的,进而提高用户的体验。
[0095] 为了更加清楚的说明本发明的技术方案及优点,下面对本发明实施例提供的一种单点共享系统进行详细说明,如图4所示,具体可以包括以下步骤:
[0096] 步骤401:服务端预先搭建Redis。
[0097] 具体地,预先搭建Redis,可以使得通过单一的Redis节点来存储服务端和Web客户端交互时产生的会话,以使所有的Web客户端都可访问Redis节点以保证session的一致性。
[0098] 步骤402:服务端当接收到Web客户端发送的首次访问请求时,生成带有sessionid的session和带有session的cookie。
[0099] 具体地,在Web客户端和服务端进行交互时,会产生session,以及session对应的sessionid和cookie,并将带有session的cookie发送给Web客户端,以使服务端接收到Web客户端发送的cookie时,根据cookie确认用户身份,实现获取同一个session达到共享session的目的。
[0100] 举例来说,设置cookie的domain参数为“x.com”,cookie的路径设置为“/”以使得cookie对应域名下允许所有路径使用cookie,设置属性名称为同一个值如“V”,可以使得相同父级域名的不同子域名网站下所有路径都可以共享name为“V”的属性值。
[0101] 步骤403:服务端将session存储到Redis中。
[0102] 具体地,在将用spring中的spring-session将session和sessionid存储到单一的Redis节点之前,需要先在spring的配置文件中指定Redis的访问地址、端口和密码,并配置Redis的连接池,在spring需要进行Redis操作时,从连接池中获取Redis连接,以实现减少spring与Redis建立连接时的时间,实现提高访问速度的目的。而利用spring中的spring-data-redis组件在对Redis操作之前,需要先根据访问地址、端口和密码与Redis进行验证,以使提高操作Redis的安全性当且仅当验证通过后,spring中的spring-session组件则可调用spring-data-redis组件操作Redis存储session,而将session】存储到单一的Redis节点,可以使得所有的Web客户端都可以访问Redis节点以保证session的一致性。
[0103] 步骤404:服务端将cookie和首次访问请求对应的回执数据发送给Web客户端。
[0104] 具体地,在服务端生成cookie后,则需要将cookie发送给Web客户端,以使Web客户端再次访问服务端时,根据cookie实现session共享,进而实现父级域名相同,不同子域名网站的单点登录。
[0105] 步骤405:Web客户端当接收到服务端发送的回执数据和cookie时,存储cookie,并将回执数据展示给用户。
[0106] 具体地,当接收到服务端回执数据和cookie时,不仅需要将回执数据展示给用户,还需要存储cookie,以使用户通过Web客户端再次与服务端进行会话时,通过cookie验证用户身份。
[0107] 步骤406:服务端当接收到Web客户端发送的再次访问请求和cookie时,解析cookie获取cookie中的sessionid。
[0108] 具体地,当接收到Web客户端发送的cookie时,需要先利用spring-session解析所述cookie,获得cookie中的sessionid,以使根据cookie中的sessionid验证用户身份。
[0109] 步骤407:服务端确定是否存在与cookie中的sessionid相同的sessionid。
[0110] 具体地,在利用spring-data-redis解析出cookie中的cookie中的sessionid后,需要利用spring-session调用spring-data-redis,确定Redis中是否存在相同的sessionid,以使在确定存在相同的sessionid后,可以实现相同父级域名下,不同子域名的网站能够共享sessionid对应的session,进而实现单点登录。
[0111] 步骤408:服务端当确定Redis中存在与cookie中的sessionid相同的sessionid时,确定Redis中是否存在与cookie中的sessionid相对应的session。
[0112] 具体地,在利用spring-session调用spring-data-Redis从Redis中查找与cookie中的sessionid相对应的sessionid后,需要确定Redis中是否存在与cookie中的sessionid相对应的唯一session,以使通过与cookie中的sessionid相对应的session实现父级域名相同,子域名不同的网站之间能够共享session。
[0113] 步骤409:服务端当确定Redis中存在与cookie中的sessionid相对应的session时,利用与cookie中的sessionid相对应的session访问再次访问请求对应的请求数据。
[0114] 具体地,当spring-session确定Redis中存在与cookie中的sessionid相对应的session时,服务端则需提取与cookie中的sessionid相对应的session中的登录信息(例如,用户名、密码),以使利用登录信息访问再次访问请求对应的请求数据。
[0115] 步骤410:服务端将请求数据发送给Web客户端,以使Web客户端将请求数据展示给用户。
[0116] 需要说明的是,为使得session由spring进行管理,需要在项目的配置文件web.xml中添加过滤器springSessionRepositoryFilter,其过滤器实现类为org.springframework.web.filter.DelegatingFilterProxy。DelegatingFilterProxy类将通过springSessionRepositoryFilter这个名称去查找Spring容器中配置的Bean并将其转换为过滤器,对于调用DelegatingFilterProxy的每个请求,将调用springSessionRepositoryFilter这个过滤器。每一个请求都会经过该filter,经过该filter的请求也会相应的经过springSessionRepositoryFilter这个过滤器,该过滤器将session进行包装,将原来应该存储在web容器中的session通过Redis操作写入Redis缓存中。经过上述对原有session的包装后,服务端获取的session都是包装后的session。
[0117] 本发明各个实施例至少具有如下有益效果:
[0118] 1、在本发明实施例中,当接收到Web客户端发送的首次访问请求而未接收到cookie时,需要生成session和带有session的cookie,并将session存储到Redis中,以使外部Web客户端可访问Redis以保证session的一致性,以及将cookie发送给Web客户端,以使在接收到Web客户端发送的再次访问请求和cookie时,可以根据cookie属性中的属性名称、路径以及domain参数的设定,从Redis中查找cookie对应的session,通过同一份session达到共享session的目的,实现在相同父级域名下不同子域名网站的单点登录的目的,进而提高用户的体验。
[0119] 2、在本发明实施例中,为了提高Redis中存储的数据的安全性,spring在访问Redis之前需要先进行身份验证,即需要先在spring的配置文件中指定Redis的待验证访问信息,例如Redis的待验证访问地址、Redis的待验证端口和Redis的待验证密码,以使通过Redis的待验证访问地址查找Redis,并在找到后根据待验证端口和待验证密码获取Redis的信任,进而实现访问Redis的目的。
[0120] 3、在本发明实施例中,在session中包括对应的sessionid,以使根据sessionid来确定唯一的session,在外部Web客户端与服务端进行会话的过程中,需要传递sessionid以验证用户的身份,即需要从cookie中解析出cookie中的sessionid,再从Redis中查找与cookie中的sessionid相同的sessionid进而完成身份验证,而在身份验证通过后,即可根据同一个sessionid从Redis中获取同一份session,进而达到共享session的目的。
[0121] 4、在本发明实施例中,在确定与所述cookie中的sessionid相对应的session后,需要提取与所述cookie中的sessionid相对应的session中的登录信息,以使根据登录信息访问用户所需的请求数据,进而实现不同子域名共享session的目的。
[0122] 5、在本发明实施例中,为了提高访问效率,预先在spring的配置文件中配置Redis的连接池,并在连接池中建立至少一个Redis与spring的Redis连接,以使在spring需要进行Redis的操作时,即可从连接池直接获取Redis连接,而无需现建立Redis连接,因此可以缩短建立Redis连接的时间,实现提高访问速度的目的。
[0123] 需要说明的是,在本文中,诸如第一和第二之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个······”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同因素。
[0124] 最后需要说明的是:以上所述仅为本发明的较佳实施例,仅用于说明本发明的技术方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所做的任何修改、等同替换、改进等,均包含在本发明的保护范围内。