学习
实践
活动
专区
工具
TVP
写文章

SpringBoot整合Shiro安全框架

最近在研究Springboot,做了一些demo尝试,在这里分享一下:

需要3张基础表,用户,角色,权限。

用户与角色关系为多对多,需要生成第三张表来维护关系,角色与权限为多对多,同样需要第三张表来维护关系,如下 :

用户表:

角色表:

权限表:

生成的数据库表如下:

配置shirorealm,自定义类继承shiro框架的AuthorizingRealm类,如下验证用户具有的权限:

验证用户的基本信息:

定义shiro基本配置类:

配置验证成功后跳转url:

shiro加密策略:

shiro处理异常:

配置信息:

数据源(采用yml,看起来比较清晰,也可用properties):

JPA:

页面整合的thymeleaf:

pom引入就不贴图了。

遇到的坑:

当基础表使用lombok插件进行注解时,有如下坑(懒加载问题):

用户对角色多对多时,fetch = EAGER就是不启用懒加载,FecthType是一个枚举类,LAZY表示懒加载,EAGER表示立即启用加载。

在角色信息里面,角色与权限多对多,角色与用户多对多,如下角色对权限开启立即加载,对用户开启懒加载(默认):

不能同时开启立即加载,同时开启报错如下:

原因google查的:

当(fetch = FetchType.EAGER)多余一个时,持久框架抓取一方的对象时,同时又将多方的对象加载进容器中,多方又可能关联其它对象,Hibernate实现的JPA,默认最高抓取深度含本身级为四级(它有个属性配置是0-3),若多方(第二级)存在重复值,则第三级中抓取的值就无法映射,就会出现 multiple bags。

使用lombac插件有get/set,出现懒加载异常,验证失败,如下:

改成手写get/set后,正常验证,如下图所示:

经过修改,最终成功跳转index路径:

登录前:

登录后:

最后,如果你想进一步了解,可关注回复,共同进步。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180824G13R6R00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

关注

腾讯云开发者公众号
10元无门槛代金券
洞察腾讯核心技术
剖析业界实践案例
腾讯云开发者公众号二维码

扫码关注腾讯云开发者

领取腾讯云代金券