到这节为止,我们已经实现了身份验证和权限验证。但是,如果我们登录之后多次访问 http://localhost:8080/userInfo/userDel 的话,会发现权限验证会每次都执行一次。这是有问题的,因为像用户的权限这些山滚慎我们备拆提供给shiro一次就够了。
下面,我们开始给shiro添加缓存支持:
在 com.example.demo.config.Shiro.ShiroConfiguration 中添加以下方法。
将缓存对象注入到 SecurityManager 中:
在src/main/resouces/config中添加ehcache-shiro.xml配置文件:
启动项目,再多次访问 http://localhost:8080/userInfo/userDel ,这时候只逗敬会在后台打印一次配置权限的信息了,说明shiro缓存起了作用。
---------------------下面我们开始配置记住密码-----------
将rememberMeManager注入到SecurityManager中
在 ShiroFilterFactoryBean 中添加记住我过滤器 user ,添加 user 过滤器的资源在记住我或认证之后就可以直接访问了。
最后,在login.html页面添加记住我单选框
启动项目,正常登录后关闭浏览器,再打开浏览器输入 http://localhost:8080/index ,这时候就可以直接访问index页面,不需要再登录了。
SpringBoot + Shiro (一)基础工程搭建
SpringBoot + Shiro (二)身份校验和角色设置
SpringBoot + Shiro (三)权限
SpringBoot + Shiro (四)缓存&记住密码
SpringBoot + Shiro (五)验证码
最后,感谢几位作者的文章解惑:
springboot整合shiro-登录认证和权限管理
Spring Boot Shiro权限管理【从零开始学Spring Boot】
Spring boot 中使用Shiro
最后帮朋友打个小广告
一个有趣的迷你小程序
在ShiroRealm 中 对所有 引入的service 加上注解 @Lazy ,防止 事务回滚失败。 具体原因看该文章
新增整合swagger2,因为之前整合了shiro,所以再访问swagger的时候总是被拦截导致无法访问,因此在ShiroConfiguration配置文件中,放开对swagger的拦截
新增CORS跨域配置。
待解决问题:前端利用vue传sessionid,后台通过shiro接收一直接收不到,后前端改成jQuery才可以,不知道问题出在哪
新增@RequiresRoles角色控制,个人感觉@RequiresRoles角色控制,属于粗粒度,@RequiresPermissions属于细粒度,因为@RequiresPermissions能给每个接口定义不同的权限
如下:
@RequiresRoles(value = "admin")
@RequiresPermissions("user:updateSysUser")
两者属于and 的关系,同时添加注解,会先验证此接口是否有规定的角色,然后验证是否有该权限,必须同时满足才会通过认证
@RequiresPermissions多权限是分两种的,这里要注意
第一种:必须全部符合(默认不写或者在后面添加logical = Logical.AND)
@RequiresPermissions(value={“studentMan:find_record_list”,“teacher:find_record_list”皮前基})
上面这种情况是默认当前对象必须同时全悔缓部拥有指定权限
第二种:符合其中一个即可(logical = Logical.OR)
@RequiresPermissions(value={“studentMan:find_record_list”,“teacher:find_record_list”},logical=Logical.OR)
上面这种情况则是只要有其中燃谨一个权限即可访问
pom文件
主要目的通过sessionid验证用户的登录状态
权限表
角色表
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)