`
我是温浩然
  • 浏览: 95964 次
文章分类
社区版块
存档分类
最新评论

webgate单点登录原理

 
阅读更多

项目代码 会不定期更新,之后会拆成 前段mvvm ,后端mvc 框架,如果需要持续关注的同学们,请打开链接后,点击 fork

项目地址:https://github.com/Wenhaoran/webgate

在用户登录系统后,生成一个随机数 ticket , 并 根据当前 账户登录信息,以及 当前账户的默认角色信息, 保存到全局 map中。

key = ticket ,value = 账户+角色。

查询当前角色对应的菜单按钮,并 拼接 菜单的 html 时,链接增加后缀 ?ticket = 刚才生成的随机数。


在点击菜单,访问系统时,请求会被拦截, 获取 项目名称(webgate),路径名称(/pages/component/form/index),ticket ,调用 接口,查询 当前 ticket是否存在。如果不存在,跳转登录界面,如果 ticket存在,则会验证,当前ticket 对应的角色,是否有权限,访问 当前项目的 当前路径,如果 没有权限,则 显示 权限不足界面,如果有权限,则显示正常界面。

至于 链接最后的&pt_rtype=m ,是在 权限不足的时候进行判断,是否过滤此次请求,因为, 过滤器会拦截所有请求, 而 有些请求,是 执行查询语句,并不是请求页面,所以,应该进行选择性的拦截,&pt_rtype=m ,就是进行 选择性拦截控制。

下面粗略说代码实现,如需看具体实现,请去github下载代码:

CommonController login , 接收登录请求的方法,判断用户是否存在,用户名是否正确,生成ticket 的方法,并把当前账户的,角色,等等信息放到session中。

PermissionFilter doFilter ,拦截所有请求,获取 项目名,路径,以及 ticket ,调用接口,判断是否有权限。

RestController 整个controller 所有方法,均为接口方法, 其中 getPermissionsBak 方法,为验证权限的方法。

Service 中的 WebMenuList 类,为,拼接 菜单html类。


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics