美文网首页工作中源代码学习
Token+Session实现不同后台系统单点登录

Token+Session实现不同后台系统单点登录

作者: ___TheOne___ | 来源:发表于2018-11-02 18:07 被阅读2273次

    1.需求描述

    有两个后台系统A、B。现在需要A系统的后台用户,登录A系统之后,能够访问B系统的公告功能。针对这个需求有两种解决方案:
    1>将A系统的所有用户接入B系统中;(开发工作量大,业务逻辑复杂);
    2>采用Token+Session方式,实现A系统的后台用户单点登录(开发工作量小,业务逻辑简单)。

    2.具体实现

    A系统后台用户访问,B系统的公告可分为以下步骤:

    首先设计表ACCESS_TOKEN_SESSION,核心表字段:token、sessonId。
    Step1: 获取token
    A系统访问时,B系统会在在ACCESS_TOKEN_SESSION表插入一条访问记录。
    eg:访问链接 http://localhost:8080/Jaden/hz15/getToken
    同时B系统开发IpWhiteListFilter过滤器,只有指定请求IP才能获取到B系统的访问token

    Step2: 携带token访问公告功能页面
    eg:http://localhost:8080/cams/html/notice.html?token=XXX
    B系统开发TokenVefityFilter过滤器,判断token是否非空、是否在数据库已有。如果token有效,获取当前请求的sessionId,更新到ACCESS_TOKEN_SESSION表的对应记录中;否则跳转到访问拒绝页面。

    Step3:访问公告功能
    B系统开发AppNoticeReqInterceptor拦截器,判断URL符合/appNotice/**请求,对应的sessionId是否有效。(即在ACCESS_TOKEN_SESSION表根据当前sessionId可以查询到一条记录)
    只有sessionId有效,才能继续访问公告功能:列表展示、新增公告等;否则跳转到访问拒绝页面。

    Step4: Session超时处理
    B系统自定义ASessionTimeoutListener监听器:当A系统生成的Session失效后,根据sessionId将ACCESS_TOKEN_SESSION表对应记录物理删除

    3.开发过程,关联基础知识深入

    1.Ajax重定向
    默认ajax是不支持重定向的,因为ajax本身就是局部刷新,不重新加载页面的。可以通过前后端共同更改实现。
    2.Session监听器注入Spring Bean
    1>因为监听器并不在Spring容器之中,所以无法使用@Autowired注入,使用ApplicationContext获取;
    2>在监听器中更改数据库记录,需要在事务中进行,在方法上添加@Transactional不起作用。

    4.参考文章

    1.ajax请求重定向---亲测有效

    2.Java在listener(监听器) 中使用Spring容器注入bean

    相关文章

      网友评论

        本文标题:Token+Session实现不同后台系统单点登录

        本文链接:https://www.haomeiwen.com/subject/bcmcxqtx.html