vue+springboot前后端分离对接单点登录
本来我们⾃⼰是有⼀套登录系统的,且⼀直在线上使⽤!但公司要求登录统⼀对接集团的单点登录,且时间很急!由于之前没有相关经验,睬了很多坑,所以记录⼀下!
开始理⼀下流程,⾸先通过域名访问项⽬,⾸先进的是登录页,这个是nginx的配置,在进登录页挂载之前我先请求了⼀个后端接⼝
springboot是啥
这个beforeMount函数是在进页⾯之前就请求的函数, 这时候到了后端接⼝,接⼝是啥不重要,但是都会先经过这个过滤器,下⾯是过滤器具体实现代码
代码⽐较长,⼤致的流程是判断当前单点登录的session是否为空,如果是空且本地的Shiro信息为空跳到单点登录地址!这个地址包括了登录成功的回调地址,我这边回调地址给了个特殊标识logincas,就是在单点登录后进⼊我们系统我们⾃⼰也要模拟登陆,因为我们是前后端分离项⽬,鉴权的逻辑在
前端,单点登录完之后我们本地模拟登陆,返回前端⽤户的菜单和按钮信息,以及我们本地也要执⾏Shiro的认证,后续根据Shiro获取当前登录⼈的信息,这边单点登录完之后单点登录返回给我们的是⼀个userId, 这个在request⾥就可以获取,后续
我们系统的处理参考如下⾯代码
此时单点登录已经成功了,后续就是我们⾃⼰系统的流程! 单点登出的流程很简单,就是把单点登录的session置为空,本地的Shiro信息登出,然后跳转到单点登出地址, 代码如下
好了,现在整个流程已经结束!这是正常情况,但是在做的过程中还是遇到了不少问题,就是在单点登录完之后这个单点登录的session不是共享的,这个项⽬我们的后台有多个服务,A服务登录了访问B服务的接⼝也是会跳到单点登录页⾯,我这边改进的是通过request的请求头来判断,在我们本地Shiro登录完之后,会给⼀个客户端Cookie且名字是ylmsSessionId,后⾯接⼝访问浏览器都会带上这
个Cookie来访问的,我是根据这个来判断是否已经登录过,上⾯代码有! 另⼀个问题是我们本地登录Shiro有效期是30分钟,单点登录过期时间是2⼩时,也就是Shiro失效我们也要跳单点登录页⾯!我这边Shiro的信息失效会跳转⼀个默认接⼝,在接⼝返回相应的状态码及路径,前端⼀个根据相应的状态码跳转路径,代码如下
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论