shiro与jwt在分布式系统的表现

shiro:
需要验证一次密码,会自动记住此sessionid判断为当前用户,保存其principals
使用token时principals为token
在分布式环境下sessionid是没有用的,只能用token作为唯一标识,shiro必须使用AbstractSessionDAO 来改变判断用户
在登录后认证会保存到缓存中,每次进来时会通过服务的缓存来判断是哪个用户登录,所以在分布式系统中必须调用集群中每一个服务的登录
可通过拦截器判断是否用友token判断其是否已登录,未登录则调用shiro的登录realm

参与用户角色以及权限的判断,提供注解以及配置url更优雅的做角色及权限管理

jwt:
只做token的解析与创建,不参与其他判断
验证是否登录只需要判断是否有token,以及token和redis中的token是否一致
不参与角色权限

角色判断:可使用拦截器,预先拿到token,将token的信息拿出来,根据是application/json还是form请求头封装其内容到request的parameter,
url权限拦截:使用拦截器,拿到uri后直接判断并返回,和shiro配置差不多

shiro 优点:提供丰富的注解,使代码更简洁
缺点:存储于缓存,用户量过大照成资源浪费,且需要在系统中每一个系统进行预登录,在token是否存在判断是否登录时可能因为token过期等一些问题

jwt 优点,不需要缓存到服务,可做集群单点登录
缺点,没有过多的注解及其他内容做角色及权限。

个人建议:分布式环境下推荐使用jwt认证,使用拦截器做权限判断,角色权限可存储到token里面,多拦截器,拦截器链一个一个执行,有时间研究的可以写几个自定义注解来做权限判断

猜你喜欢

转载自blog.csdn.net/qq_27275851/article/details/108199025