spring security版 源码地址:https://gitee.com/zhang.w/boot-security.git
shiro版 源码地址:https://gitee.com/zhang.w/boot-backend.git
随着spring boot的出现,java又上升了一个层次,以往tomcat部署war的形式也改变了,现在可以直接一个jar包、一行命令,真正实现一次编译随处运行的理念了。
闲暇之余小威老师做了一个以spring boot为后台,layui、bootstrap、jquery、html为前端的后台管理系统,接口以restful的风格呈现,良好的语义表达,令接口uri规范又提升了一个档次,使编程更规范、更良好,也使coding有了更多的文艺气息。
该boot-backend系统,采用了jdk1.8使用了lamdba表达式,采用了shiro进行权限控制,实现了按钮级别的权限。目前数据库采用的是mysql,表格分页用的是datatables,智能排序,orm采用的是mybatis。
完全可以作为项目开发的脚手架,作为基础项目,根据自己项目需求进行扩展功能。
目前系统内置了一些功能:
- 用户管理
- 菜单管理:支持多级菜单
- 角色管理
- job集群:创建job、取消job、取消job、下拉搜索spring bean
- 日志查询
- 邮件管理
- 文件管理:上传、删除文件
- 公告管理:公告列表、公告未读数提醒、公告阅读人
- Excel下载:自己在页面编写sql,数据可导出到excel,也可在页面以表格展示
- 代码生成:根据表名,生成bean、controller、dao、mapper.xml,以及增删改查的页面
菜单列表
excel导出
添加job
swagger文档
有一点需要特别注意,在我们使用shiro时,如果我们开启了使用redis的session共享,即借助spring-session的@EnableRedisHttpSession时,shiro的doGetAuthorizationInfo获取权限缓存可能会失效,即从缓存中获取不到权限信息了。从源码中可以看出AuthorizingRealm获取权限缓存的时候,是Object key = getAuthorizationCacheKey(principals)这样获取的,getAuthorizationCacheKey方法是直接返回PrincipalCollection对象,spring-session每次从redis中获取此对象的时候,反序列化成对象之后,对象的地址都是不同的,这就是导致的原因。
有两个办法来解决:
比如我们的PrincipalCollection存入的是User对象
1、我们可以重写User的equals和hashcode。
2、我们可以重写Reaml的getAuthorizationCacheKey方法,最好返回一个字符串,我们可以用一个前缀加上userId来作为缓存key。
建议使用第2种方法来实现,这样更符合开闭原则。
spring security版 源码地址:https://gitee.com/zhang.w/boot-security.git
shiro版 源码地址:https://gitee.com/zhang.w/boot-backend.git