一种基于Cookie机制的JAAS登录方法和服务器的制造方法
【专利摘要】本发明提出一种基于Cookie机制的JAVA验证和授权(JAAS)登录方法和服务器,其中方法包括:接收来自用户的登录请求,对所述登录请求验证成功后,加载用户的授权信息,为所述授权信息生成对应的标识,保存所述用户的授权信息及其对应的标识的对应关系;将所述授权信息的标识添加至当前Cookie中,并将所述Cookie发送至用户;接收来自用户的业务请求,所述业务请求包含Cookie;从所述Cookie中获取所述用户的授权信息的标识,根据所述授权信息的标识查找所述对应关系,得到对应的授权信息;将所述授权信息添加到会话(Session)对象中,执行所述业务请求。本发明能够不依赖于Session机制实现JAAS登录。
【专利说明】—种基于Cookie机制的JAAS登录方法和服务器
【技术领域】
[0001]本发明涉及JAVA Web应用系统【技术领域】,尤其涉及一种基于Cookie机制的JAVA验证和授权(JAAS)登录方法和服务器。
【背景技术】
[0002]在当今Java Web应用系统中,系统登录是每个Web应用系统不可缺少的功能,而由于Tomcat Web应用服务器的广泛使用,它提供的JAAS基于表单验证的登录方式也在Web应用系统中被广泛的采纳。JAAS被实现为可插入的方式,允许应用系统同底层的具体认证技术保持独立,新增或者更新认证方法并不需要更改应用系统本身,很好的隔离了应用系统的登录验证与应用系统本身的代码。
[0003]JAAS是通过Tomcat应用服务器对表单中所提供的数据进行验证,基于表单的验证使系统开发者可以自定义用户的登陆页面和报错页面。通过拦截用户的请求,检查用户是否在应用系统中已经创建好登录Session,如果没有,则将用户请求转向到认证服务的登录页面。
[0004]图1为现有的JAAS登录验证中的登录过程示意图。如图1所示,用户提交登录信息,系统验证用户的登录信息,如果验证未通过,则跳转至登录页面;如果验证通过,则加载用户的授权信息,将用户的授权信息添加到会话(Session)中,并跳转至登录成功页面。
[0005]图2为现有的JAAS登录验证中的处理请求过程示意图。如图2所示,用户向Web应用系统发送请求,系统获取Session对象,从Session对象中获取登录验证标识,判断是否存在该登录验证标识,如果存在,则处理正常业务;如果不存在,则跳转至登录页面。
[0006]现有的JAAS登录验证依赖于Session机制,而Session机制会导致Web应用系统至少存在以下问题:
[0007]第一,在集群部署Web应用系统时,Web应用服务器之间会进行Session的同步。但是,Session的同步会有时间延迟问题。即第一次请求到Web应用服务器A上,并成功登录后,A会向其他Web应用服务器进行Session的同步。第二次请求到Web应用服务器B上,Session同步可能还未完成,Web应用服务系统B获取不到登录成功标识,会跳转到登录页面进行重新登录。同时,在系统注销时,也会涉及到单台Web应用服务器注销之后其他Web应用服务器的Session还是存在的问题。
[0008]第二,Web应用服务器之间进行Session复制的过程中,会影响应用服务器的性能,增加Web应用服务器对用户客户端浏览器页面的响应时间。
[0009]可见,现有的JAAS登录方法由于依赖于Session机制,对于用户量和并发量日益增加的Web应用系统来说,已经很难维护Web应用系统的稳定运行。
【发明内容】
[0010]本发明提供了一种基于Cookie机制的JAAS登录方法,能够不依赖于Session机制实现JAAS登录。[0011]本发明还提供了一种基于Cookie机制实现JAAS登录的服务器,能够不依赖于Session机制实现JAAS登录。
[0012]本发明的技术方案是这样实现的:
[0013]一种基于Cookie机制的JAAS登录方法,该包括:
[0014]接收来自用户的登录请求,对所述登录请求验证成功后,加载用户的授权信息,为所述授权信息生成对应的标识,保存所述用户的授权信息及其对应的标识的对应关系;将所述授权信息的标识添加至当前Cookie中,并将所述Cookie发送至用户;
[0015]接收来自用户的业务请求,所述业务请求包含Cookie ;从所述Cookie中获取所述用户的授权信息的标识,根据所述授权信息的标识查找所述对应关系,得到对应的授权信息;将所述授权信息添加到会话(Session)对象中,执行所述业务请求。
[0016]上述方法中,为授权信息生成对应的标识的方式可以为:随机生成;
[0017]保存所述用户授权信息及其对应的标识的对应关系的方式可以为:将所述用户的授权信息作为Redis值(Redis Value),将对应的标识作为Redis Value所对应的Redis键值(Redis Key),并将所述Redis Value及其对应的Redis Key保存在Redis缓存中。
[0018]上述方法中,根据授权信息的标识查找所述对应关系,得到对应的授权信息的方式可以为:
[0019]将所述授权信息的标识作为Redis Key,查找所述Redis缓存中是否存在所述Redis Key所对应的Redis Value,如果存在,则将所述Redis Value作为该授权信息的标识所对应的授权信息。
[0020]上述方法可以进一步包括:
[0021]当所述Redis缓存中不存在所述Redis Key,则加载所述用户的授权信息,为所述授权信息生成对应的标识,并将所述授权信息作为Redis Value,将所述授权信息的标识作为Redis Key,将所述Redis Value及其对应的Redis Key保存Redis缓存中;将所述记加载的授权信息添加到Session对象中,执行所述业务请求。
[0022]上述方法可以进一步包括:
[0023]当所述Redis缓存中存在所述Redis Key,但不存在所述Redis Key所对应的Redis Value时,加载所述用户的授权信息,将所述授权信息作为所述Redis Key所对应的Redis Value,并将所述Redis Key所对应的Redis Value保存在Redis缓存中;将所述记加载的授权信息添加到Session对象中,执行所述业务请求。
[0024]一种基于Cookie机制实现JAAS登录的服务器,包括:
[0025]登录处理模块,用于接收来自用户的登录请求,对所述登录请求验证成功后,加载用户的授权信息,为所述授权信息生成对应的标识,保存所述用户的授权信息及其对应的标识的对应关系;将所述授权信息的标识添加至当前Cookie中,并将所述Cookie发送至用户;
[0026]请求处理模块,用于接收来自用户的业务请求,所述业务请求包含Cookie ;从所述Cookie中获取所述用户的授权信息的标识,根据所述授权信息的标识查找所述对应关系,得到对应的授权信息;将所述授权信息添加到会话(Session)对象中,执行所述业务请求。
[0027]上述服务器中,登录处理模块可以为授权信息随机生成对应的标识;[0028]登录处理模块可以将所述用户的授权信息作为Redis值(Redis Value),将对应的标识作为Redis Value所对应的Redis键值(Redis Key),并将所述Redis Value及其对应的Redis Key保存在Redis缓存中。
[0029]上述服务器中,请求处理模块根据授权信息的标识查找所述对应关系,得到对应的授权信息的方式可以为:
[0030]将所述授权信息的标识作为Redis Key,查找所述Redis缓存中是否存在所述Redis Key所对应的Redis Value,如果存在,则将所述Redis Value作为该授权信息的标识所对应的授权信息。
[0031 ] 请求处理模块还可以用于:
[0032]当所述Redis缓存中不存在所述Redis Key时,加载所述用户的授权信息,为所述授权信息生成对应的标识,并将所述授权信息作为Redis Value,将所述授权信息的标识作为Redis Key,将所述Redis Value及其对应的Redis Key保存Redis缓存中;将所述记加载的授权信息添加到Session对象中,执行所述业务请求。
[0033]请求处理模块还可以用于:
[0034]当所述Redis缓存中存在所述Redis Key,但不存在所述Redis Key所对应的Redis Value时,加载所述用户的授权信息,将所述授权信息作为所述Redis Key所对应的Redis Value,并将所述Redis Key所对应的Redis Value保存在Redis缓存中;将所述记加载的授权信息添加到Session对象中,执行所述业务请求。
[0035]可见,本发明提出的基于Cookie机制的JAAS登录方法和服务器,采用Cookie机制替代现有JAAS的Session同步,从而减少Web应用服务器之间Session同步过程造成的性能损耗,并避免重复登录的发生,维护Web应用系统的稳定运行。
【专利附图】
【附图说明】
[0036]图1为现有的JAAS登录验证中的登录过程示意图;
[0037]图2为现有的JAAS登录验证中的处理请求过程示意图;
[0038]图3为本发明提出的基于Cookie机制的JAAS登录方法实现流程图;
[0039]图4为本发明实施例一的实现流程图;
[0040]图5为本发明实施例二的实现流程图;
[0041]图6为本发明提出的基于Cookie机制实现JAAS登录的结构示意图。
【具体实施方式】
[0042]本发明提出一种基于Cookie机制的JAAS登录方法,如图3为该方法的实现流程图,包括:
[0043]步骤301:接收来自用户的登录请求,对所述登录请求验证成功后,加载用户的授权信息,为所述授权信息生成对应的标识,保存所述用户的授权信息及其对应的标识的对应关系;将所述授权信息的标识添加至当前Cookie中,并将所述Cookie发送至用户;
[0044]步骤302:接收来自用户的业务请求,所述业务请求包含Cookie ;从所述Cookie中获取所述用户的授权信息的标识,根据所述授权信息的标识查找所述对应关系,得到对应的授权信息;将所述授权信息添加到Session对象中,执行所述业务请求。[0045]上述步骤301中,为授权信息生成对应的标识的方式可以为:随机生成;
[0046]上述步骤301中,保存用户授权信息及其对应的标识的对应关系的方式可以为:将用户的授权信息作为Redis Value,将对应的标识作为Redis Value所对应的Redis Key,并将所述Redis Value及其对应的Redis Key保存在Redis缓存中。
[0047]相应地,上述步骤302中,根据授权信息的标识查找所述对应关系,得到对应的授权信息的方式可以为:
[0048]将所述授权信息的标识作为Redis Key,查找所述Redis缓存中是否存在所述Redis Key所对应的Redis Value,如果存在,则将所述Redis Value作为该授权信息的标识所对应的授权信息。
[0049]上述过程可以进一步包括:
[0050]当Redis缓存中不存在所述Redis Key,则加载所述用户的授权信息,为所述授权信息生成对应的标识,并将所述授权信息作为Redis Value,将所述授权信息的标识作为Redis Key,将所述Redis Value及其对应的Redis Key保存Redis缓存中;将所述记加载的授权信息添加到Session对象中,执行所述业务请求。
[0051]当Redis缓存中存在所述Redis Key,但不存在所述Redis Key所对应的RedisValue时,加载所述用户的授权信息,将所述授权信息作为所述Redis Key所对应的RedisValue,并将所述Redis Key所对应的Redis Value保存在Redis缓存中;将所述记加载的授权信息添加到Session对象中,执行所述业务请求。
[0052]本发明包括用户登录和登录成功后处理请求这两个过程,以下举具体的实施例详细介绍。
[0053]实施例一:
[0054]本实施例介绍用户登录过程,如图4本实施例一的实现流程图,包括:
[0055]步骤401:用户发送登录请求,该登录请求中包括用户名和密码。
[0056]步骤402:应用系统接收到登录请求后,从登录请求中获取用户名和密码,查询用户表判断该用户名是否存在,如果存在,则进一步核实密码是否正确。
[0057]如果用户名不存在或密码不正确,说明校验不成功,跳转到系统登录页面重新登录;如果用户名和密码均正确,则说明系统登录验证成功,进一步执行步骤403。
[0058]步骤403:加载用户的授权信息(包括角色、权限等),为该授权信息随机生成对应的标识;将授权信息的序列化结果写入到统一的Redis缓存中,作为Redis Value,并将该授权信息的标识写入到统一的Redis缓存中,作为该Redis Value所对应的Redis Key。
[0059]步骤404:将用户的基本信息加密结果及Redis Key写入到当前Cookie,同时,将登录请求跳转到应用系统登录成功后的欢迎页面。
[0060]这样,通过上述过程,在登录成功后,用户的客户端浏览器就拥有了系统登录成功后的Cookie,同时,在统一的Redis缓存中也拥有了所有登录成功用户的授权信息。
[0061]实施例二:
[0062]本实施例介绍用户登录成功后处理请求的过程,如图5为实施例二的实现流程图,包括:
[0063]步骤501:用户请求Web应用系统,Web应用系统获取当前请求的Cookie。
[0064]步骤502:校验该Cookie是否为有效Cookie,如果无效,跳转至登录页面重新登录;如果有效,则执行步骤503。
[0065]步骤503:从该Cookie中获取该用户授权信息的标识。
[0066]步骤504:将该用户授权信息的标识作为Redis Key,判断Redis缓存中是否存在该Redis Key,如果不存在,则加载当前用户的授权信息,将授权信息序列化结果写入到Redis缓存中,作为Redis Value,并随机生成该授权信息对应的标识,将授权信息对应的标识写入到Redis缓存中,作为该Redis Value所对应的Redis Key,继续执行步骤506 ;如果存在,则继续执行步骤505。
[0067]步骤505:判断Redis缓存中是否存在该Redis Key所对应的Redis Value,如果存在,获取该Redis Value (也就是该用户的授权信息),继续执行步骤506 ;如果不存在,说明该用户的授权信息在Redis缓存中已过期,则重新加载该用户的授权信息,并写入到Redis缓存中,作为该Redis Key所对应的Redis Value, Redis Key还是使用步骤503中获取的值,继续执行步骤506。
[0068]步骤δ06:构造Session对象。
[0069]步骤507:将上述重新加载或通过Redis缓存查询到的授权信息添加到Session对象中,执行后续的应用系统业务代码。
[0070]这样,基于JAAS登录方式的Web应用系统,可以不用修改调用了 Session的复杂代码,从应用系统登录功能的源头来解决前面提到的问题。同时,该改造不但可以依赖Cookie机制很好的支持大规模集群的Web应用服务,而且也极大提到了系统的性能和服务的稳定性。
[0071]本发明还提出一种基于Cookie机制实现JAAS登录的服务器,如图6为该服务器的结构示意图,包括:
[0072]登录处理模块601,用于接收来自用户的登录请求,对所述登录请求验证成功后,加载用户的授权信息,为所述授权信息生成对应的标识,保存所述用户的授权信息及其对应的标识的对应关系;将所述授权信息的标识添加至当前Cookie中,并将所述Cookie发送至用户;
[0073]请求处理模块602,用于接收来自用户的业务请求,所述业务请求包含Cookie ;从所述Cookie中获取所述用户的授权信息的标识,根据所述授权信息的标识查找所述对应关系,得到对应的授权信息;将所述授权信息添加到Session对象中,执行所述业务请求。
[0074]上述服务器中,登录处理模块601可以为授权信息随机生成对应的标识;
[0075]登录处理模块601可以将所述用户的授权信息作为Redis Value,将对应的标识作为Redis Value所对应的Redis Key,并将所述Redis Value及其对应的Redis Key保存在Redis缓存中。
[0076]上述服务器中,请求处理模块602根据授权信息的标识查找所述对应关系,得到对应的授权信息的方式可以为:
[0077]将所述授权信息的标识作为Redis Key,查找所述Redis缓存中是否存在所述Redis Key所对应的Redis Value,如果存在,则将所述Redis Value作为该授权信息的标识所对应的授权信息。
[0078]上述请求处理模块602还可以用于:
[0079]当所述Redis缓存中不存在所述Redis Key时,加载所述用户的授权信息,为所述授权信息生成对应的标识,并将所述授权信息作为Redis Value,将所述授权信息的标识作为Redis Key,将所述Redis Value及其对应的Redis Key保存Redis缓存中;将所述记加载的授权信息添加到Session对象中,执行所述业务请求。
[0080]当所述Redis缓存中存在所述Redis Key,但不存在所述Redis Key所对应的Redis Value时,加载所述用户的授权信息,将所述授权信息作为所述Redis Key所对应的Redis Value,并将所述Redis Key所对应的Redis Value保存在Redis缓存中;将所述记加载的授权信息添加到Session对象中,执行所述业务请求。
[0081]综上可见,本发明基于Cookie机制和Redis缓存对JAAS登录方式中采用的Session机制进行有效的改造,不但可以减少Web应用服务器的服务性能损耗,还可以减少客户端用户请求系统的时间,减少浏览器页面的响应时间;同时,也避免了 Web应用系统JVM内存的溢出,可以很好解决采用JAAS登录方式的Web应用系统所面临的日益增长用户量和并发量所带来的系统压力问题。
[0082]以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
【权利要求】
1.一种基于Cookie机制的JAVA验证和授权JAAS登录方法,其特征在于,所述方法包括: 接收来自用户的登录请求,对所述登录请求验证成功后,加载用户的授权信息,为所述授权信息生成对应的标识,保存所述用户的授权信息及其对应的标识的对应关系;将所述授权信息的标识添加至当前Cookie中,并将所述Cookie发送至用户; 接收来自用户的业务请求,所述业务请求包含Cookie ;从所述Cookie中获取所述用户的授权信息的标识,根据所述授权信息的标识查找所述对应关系,得到对应的授权信息;将所述授权信息添加到会话Session对象中,执行所述业务请求。
2.根据权利要求1所述的方法,其特征在于,所述为授权信息生成对应的标识的方式为:随机生成; 所述保存所述用户授权信息及其对应的标识的对应关系的方式为:将所述用户的授权信息作为Redis值Redis Value,将对应的标识作为Redis Value所对应的Redis键值RedisKey,并将所述Redis Value及其对应的Redis Key保存在Redis缓存中。
3.根据权利要求2所述的方法,其特征在于,所述根据授权信息的标识查找所述对应关系,得到对应的授权信息的方式为: 将所述授权信息的标识作为Redis Key,查找所述Redis缓存中是否存在所述RedisKey所对应的Redis Value,如果存在,则将所述Redis Value作为该授权信息的标识所对应的授权信息。
4.根据权利要求3所述的方法,其特征在于,所述方法进一步包括: 当所述Redis缓存中不存在所述Redis Key,则加载所述用户的授权信息,为所述授权信息生成对应的标识,并将所述授权信息作为Redis Value,将所述授权信息的标识作为Redis Key,将所述Redis Value及其对应的Redis Key保存Redis缓存中;将所述记加载的授权信息添加到Session对象中,执行所述业务请求。
5.根据权利要求3或4所述的方法,其特征在于,所述方法进一步包括: 当所述Redis缓存中存在所述Redis Key,但不存在所述Redis Key所对应的RedisValue时,加载所述用户的授权信息,将所述授权信息作为所述Redis Key所对应的RedisValue,并将所述Redis Key所对应的Redis Value保存在Redis缓存中;将所述记加载的授权信息添加到Session对象中,执行所述业务请求。
6.一种基于Cookie机制实现JAVA验证和授权JAAS登录的服务器,其特征在于,所述服务器包括: 登录处理模块,用于接收来自用户的登录请求,对所述登录请求验证成功后,加载用户的授权信息,为所述授权信息生成对应的标识,保存所述用户的授权信息及其对应的标识的对应关系;将所述授权信息的标识添加至当前Cookie中,并将所述Cookie发送至用户; 请求处理模块,用于接收来自用户的业务请求,所述业务请求包含Cookie ;从所述Cookie中获取所述用户的授权信息的标识,根据所述授权信息的标识查找所述对应关系,得到对应的授权信息;将所述授权信息添加到会话Session对象中,执行所述业务请求。
7.根据权利要求6所述的服务器,其特征在于,所述登录处理模块为授权信息随机生成对应的标识; 所述登录处理模块将所述用户的授权信息作为Redis值Redis Value,将对应的标识作为Redis Value所对应的Redis键值Redis Key,并将所述Redis Value及其对应的RedisKey保存在Redi s缓存中。
8.根据权利要求7所述的服务器,其特征在于,所述请求处理模块根据授权信息的标识查找所述对应关系,得到对应的授权信息的方式为: 将所述授权信息的标识作为Redis Key,查找所述Redis缓存中是否存在所述RedisKey所对应的Redis Value,如果存在,则将所述Redis Value作为该授权信息的标识所对应的授权信息。
9.根据权利要求8所述的服务器,其特征在于,所述请求处理模块还用于: 当所述Redis缓存中不存在所述Redis Key时,加载所述用户的授权信息,为所述授权信息生成对应的标识,并将所述授权信息作为Redis Value,将所述授权信息的标识作为Redis Key,将所述Redis Value及其对应的Redis Key保存Redis缓存中;将所述记加载的授权信息添加到Session对象中,执行所述业务请求。
10.根据权 利要求8或9所述的服务器,其特征在于,所述请求处理模块还用于: 当所述Redis缓存中存在所述Redis Key,但不存在所述Redis Key所对应的RedisValue时,加载所述用户的授权信息,将所述授权信息作为所述Redis Key所对应的RedisValue,并将所述Redis Key所对应的Redis Value保存在Redis缓存中;将所述记加载的授权信息添加到Session对象中,执行所述业务请求。
【文档编号】H04L29/06GK103841117SQ201410107953
【公开日】2014年6月4日 申请日期:2014年3月21日 优先权日:2014年3月21日
【发明者】韩松 申请人:北京京东尚科信息技术有限公司, 北京京东世纪贸易有限公司