您的位置:首页 > 其它

Shiro

2020-02-01 20:35 78 查看

ShiroConfig 在这个shiroConfig里面配置了很多东西。shiro的主拦截器有个过滤器。在这个过滤器里面我们也是可以编程的。在这种编程方式出现前,我们任何内容都是通过xml去进行配置的,现在出现springboot之后很多项目把配置型的东西变成编码集。在我们这个ShiroConfig的工作类里面有一个Shiro @Bean的一个name (@Bean(shiroFilterName)private static final String shiroFilterName =“shiroFilter”) 他其实叫shiroFilter。他其实就只在我们系统中配置了一个过滤器,
过滤器:

名字必须叫shiroFilter需要跟spring去结合。这里看一个用xml去配置shiro过滤器,用xml去配置是spring自动去找shiro

在我用spring结合的这个shirofilter,return一个shiroFilterFactoryBean这个对象他是shiro与spring自动结合。

xml配置shiro要知道一开始要有 shiro Filter 。第二个要在shiro的Filter里面配置安全管理器(securityManager)。第三个要去配置登录成功的路径(loginUrl)和登录路径(successUrl)这个是我们程序的开口和闭环 。 第四个 url权限拦截或者不拦截的规则 :anon:放行 authc:拦截相当于filter拦截器

描述之前登陆
我们的shiro
用户名密码封装到 UsernamePasswordToken 中 然后 使用 SecurityUtils获取 Subject对象 执行login方法传入封装的 Token对象

这样 我shiro的 核心 AuthorizingRealm(奥泽ruai泽ing ruai母)的子类 执行 AuthenticationInfo(奥zen Ti K 神 info)进行真正的验证操作,这可以说是一个代理模式,用token对象执行getPrincipal(普润四炮)获取到我得这个用户名,getCredentials(酷睿den你少四)获取到密码去进行一个验证,如果验证失败则 抛出异常 throw new UnknownAccountException(“账号或密码不正确”);
成功后则返回 SimpleAuthenticationInfo (森泡 奥zen Ti K 神 info)。
验证操作,我经常接触的是两种,一种是页面标签,一种是 注解( @RequiresPermissions(“sys:menu:menu”))(瑞块儿四 破没神四)。
页面中需要某个角色权限的话是 shiro:role 触发获取权限的 方法
doGetAuthorizationInfo(AuthorizationInfo 奥色ri贼神 info)
通过 Subject对象可以获取到用户ID,然后通过这个ID 查询用户表关联其角色,权限,会封装到一个Set集合中,
如果是权限使用 setStringPermissions(P米神s)
如果获取的是角色的话 就setRoles() 中,返回
SimpleAuthorizationInfo( 奥色ri贼神 info) 对象
这样拥有权限或角色的 用户标签就会打开.没有就不现实,这个标签我们非常灵活,可以设置在html中也可以设置在script里。
是可以再后台防止用户越权的.
比如他自己手写了一个url过来进行访问.
这样我们就不用去屑一堆拦截器去限制.
我们另外一个核心可以设置url的 拦截规则
shiroFilterFactoryBean 配置 LinkedHashMap(也是非安全的 LinkedHashMap继承了HashMap,所以拥有和HashMap一样的功能;而且在此基础上有增加了一个双向链表来实现元素迭代的顺序,但是肯定会增加时间和空间的消耗,) key就是 路径value是限制方式 annon为不限制 authc为限制 role:为务必是哪种角色等等
shiroFilterFactoryBean.setLoginUrl("/login");
shiroFilterFactoryBean.setSuccessUrl("/index");
securityManager 安全管理器
配置我们的 realm对象.
由于每次,请求的时候都要去拿权限,这样如果直接访问数据库,那么数据库压力巨大,shiro可以无缝配置redis,只要搭建进来
securityManager.setCacheManage 就能够把redis和shiro结合在一起,如果权限改变则更新到redis中 。移植性特别强.

权限涉及到5张表:
用户表,角色表,权限表(菜单表),用户角色关联表,角色权限关联表

当用户登录时,根据用户名和密码到用户表验证信息是否合法,如果合法
则获取用户信息,之后根据用户id再到用户角色关联表中得到相关连的角色
id集合,之后根据角色id再到角色权限关联表中获取该角色所拥有的权限id集合,
然后再根据权限id集合到权限表(菜单表)中获取具体的菜单,展现给当前
登录用户,从而达到不同用用户看到不同的菜单权限。

我们通过ZTree来给角色赋权并且通过ZTree来展示菜单,以及通过ZTree来管 理菜单即增加和编辑菜单。
我们做的权限控制到url级别,为了防止用户不登录直接输入url访问的这个弊端,通过拦截器进行拦截验证。

  • 点赞
  • 收藏
  • 分享
  • 文章举报
放牛的小牧童 发布了7 篇原创文章 · 获赞 0 · 访问量 152 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: