最近在研究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路径:
登录前:
登录后:
最后,如果你想进一步了解,可关注回复,共同进步。
领取专属 10元无门槛券
私享最新 技术干货