求问:SpringCloud多模块整合,单点登录方案

目前,前端vue,后端SpringCloud多模块,各个模块无关联,可单独运行。

我按照官方教程,单独建立了一个FineReport模块,采用war包模式;

然后放到外置tomcat中启动,可以正常访问,进入决策系统等等都没问题。


下一步是单点登录,预想用户只需登录一次原有系统,就可以访问决策系统。


参考了官方文档 https://help.finereport.com/doc-view-3232.html


第一次尝试:

  1. 原有系统的登录模块为 GateWay,采用jwt认证,认证方法如下;

    其中JwtAuthenticaitonRequest是自定的实体,内部仅仅接收username和password;


    但按照文档中的说明,拦截登录请求的Filter应该是在Fr模块中,于是卡住了,没法从Fr模块拦截GateWay的请求。


    1.png


其他想法:

  1. 如果无法跨模块拦截登录请求,就改为先登录原有系统;

      登录成功后,再用RPC调用Fr模块进行认证;

      但是发现没法获取 ServletRequest、ServletResponse、FilterChain;


  2. 是否可以在上面的认证方法加入ServletRequest、ServletResponse两个参数,通过RPC传 递到Fr模块呢?


  3. 这部分尚未验证,不知道是否可行。


第二次尝试:参考官方文档 https://help.finereport.com/doc-view-884.html

  1. 在前端发起登录认证的回调函数中,向Fr发起认证请求,请求地址为:

      http://localhost:8080/fr/decision/login/cross/domain?fine_username=username&fine_password=passowrd&validity=-1


  2. 经此测试,是可以完成认证的,返回结果:

callback({"accessToken":"eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJmYW5ydWFuIiwiaWF0IjoxNTg0NDMwNzczLCJleHAiOjE1ODQ0MzQzNzMsInN1YiI6ImxlZSIsImRlc2NyaXB0aW9uIjoiWzY3NGVdWzRmY2FdKGxlZSkiLCJqdGkiOiJqd3QifQ.TiihfESiZRL0RAl1sRql8-uHv-rTsTHkpFADMbOpDwg","url":"<a href="http://localhost:8080/fr/decision?fine_username=username&fine_password=password&validity=-1","status":"success"})">http://localhost:8080/fr/decision?fine_username=username&fine_password=password&validity=-1","status":"success"})


  3. 认证成功后,访问:http://localhost:8080/fr/decision,即可进入决策系统首页。


  4. 但是这样就要发两次请求,和预想中的不一样,能否在一次登录中,完成两个系统的认证,求大佬给一些解决方案。



                             万分感谢。

FineReport Lee1314 发布于 2020-3-17 17:20 (编辑于 2020-3-18 08:37)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共1回答
最佳回答
0
bbyymLv2见习互助
发布于2021-3-22 14:36

解决了吗?

  • 2关注人数
  • 1370浏览人数
  • 最后回答于:2021-3-22 14:36
    请选择关闭问题的原因
    确定 取消
    返回顶部