spring boot后台管理系统,shiro权限管理, restful风格的接口

来源:互联网 发布:陆行鲨机甲风暴java 编辑:程序博客网 时间:2024/05/17 21:50

     随着spring boot的出现,java又上升了一个层次,以往tomcat部署war的形式也改变了,现在可以直接一个jar包、一行命令,真正实现一次编译随处运行的理念了。

     闲暇之余小威老师做了一个以spring boot为后台,layui、bootstrap、jquery、html为前端的后台管理系统,接口以restful的风格呈现,良好的语义表达,令接口uri规范又提升了一个档次,使编程更规范、更良好,也使coding有了更多的文艺气息。

     该boot-backend系统,采用了jdk1.8使用了lamdba表达式,目前用spring boot1.5.6,后续可随着spring boot的发展升级,采用了shiro进行权限控制,实现了按钮级别的权限。目前数据库采用的是mysql,表格分页用的是datatables,智能排序。

     完全可以作为项目开发的脚手架,作为基础项目,根据自己项目需求进行扩展功能。

 


目前系统内置了一些功能:

  • 用户管理
  • 菜单管理:目前仅支持二级菜单
  • 角色管理
  • 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种方法来实现,这样更符合开闭原则。