单点登录——用户中心大致流程

客户端需要登录后才能执行的操作,在拦截器Interceptor中设置。第一次访问客户端拦截器(拦截所有登录后才能做的操作,目录规划时要规划好,/back**),没有token,跳转到用户中心服务器(response.sendRedirect(url)),(url中带着returnUrl,用来在用户中心登录成功后跳转回客户端正在访问的页面),登录成功后,生产token,并且将token追加到returnUrl上,同时在服务器端session中保存登录成功获得的admin,在服务ConstatFinalUtil的常量中创建一个Map,并且将键值对“token,adminJSON”(变成JSON是为了方便与客户端传输)保存到Map中(实际上是放到redis中),跳转回带着tokenreturnUrl,及返回客户端。

这时候第二次访问客户端拦截器,已经带上token。有了token还不行,需要到用户中心中去核对是不是用户中心生成的token(防止用户自己自己加token),这时候用到一个URL类,可以获取指定网址返回的内容,可以封装成HttpUtil工具类。具体做法是将版本号version、加密信息、token等信息打包成JSON对象,用HttpUtil工具类连接访问到用户中心的verifyTokenServie服务,来验证token等信息是否正确(验证token通过在生成tokenMap中查找键是“token”的admin是否为null如果为null这证明此token没有,如果不为null则证明token是真的),如果token验证为真,则将得到的admin、成功信息等打包成JSON格式,返回HttpUtil,再返回到客户端Interceptor,这时候客户端就有了admin等信息了。

强调:(1)客户端与用户中心交互,由于是两个服务器通过http协议传递信息,所以admin等信息都是先封装成JSON格式,再用JSON.toJsonString,转换成JSON格式的字符串传递,另一端接收后再用JSON.parse()转换为JSON对象。

(2)第一次生成admin后在服务器端的session中存储,可以在服务器端记录客户端用户登录状态,访问之前先看session中有没有admin,如果得到值不为null,则证明此用户已经在用户中心登录过;客户端第一次接收到admin也在保存在session,可以在客户端记录用户登录信息,用户访问时如果session中的“admin”不为null则证明已经登录过,就不用去用户中心登录了。

用一副图简易表示:


阅读更多
换一批

没有更多推荐了,返回首页