shiro整合springboot实战:一、项目搭建和数据库表设计

1.参考mybatis-plus教程建立一个简单的springboot项目,然后加入shiro依赖



    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.1.8.RELEASE
         
    
    com.zdw
    mybatis-plus-demo
    0.0.1-SNAPSHOT
    mybatis-plus-demo
    Demo project for Spring Boot

    
        1.8
    

    
        
            org.springframework.boot
            spring-boot-starter
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
        

        
            org.springframework.boot
            spring-boot-starter-web
            2.0.2.RELEASE
        

        
            org.projectlombok
            lombok
            1.16.10
        


        
        
            com.alibaba
            druid
            1.0.26
        


        
            mysql
            mysql-connector-java
            5.1.37
        

        
        
            com.baomidou
            mybatis-plus-boot-starter
            3.2.0
        

        
            com.baomidou
            mybatis-plus-generator
            3.2.0
        
        
            org.apache.velocity
            velocity-engine-core
            2.1
        

        
        
            org.apache.shiro
            shiro-spring
            1.4.0
        
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    



2.数据库表设计

表设计基于RBAC的设计理念
RBAC: Role Based Access Control
基于角色的访问控制系统。权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限
优点:简化了用户与权限的管理,通过对用户进行分类,使得角色与权限关联起来
缺点:开发对比ACL相对复杂
例子:基于RBAC模型的权限验证框架与应用 Apache Shiro、spring Security

权限表
CREATE TABLE `permission` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(128) DEFAULT NULL COMMENT '名称',
  `url` varchar(128) DEFAULT NULL COMMENT '接口路径',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

角色表
CREATE TABLE `role` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(128) DEFAULT NULL COMMENT '名称',
  `description` varchar(64) DEFAULT NULL COMMENT '描述',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

角色与权限的关系表
CREATE TABLE `role_permission` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `role_id` int(11) DEFAULT NULL,
  `permission_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

用户表
CREATE TABLE `user` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(128) DEFAULT NULL COMMENT '用户名',
  `password` varchar(256) DEFAULT NULL COMMENT '密码',
  `create_time` datetime DEFAULT NULL,
  `salt` varchar(128) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

用户和角色的关系
CREATE TABLE `user_role` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `role_id` int(11) DEFAULT NULL,
  `user_id` int(11) DEFAULT NULL,
  `remarks` varchar(64) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

3.生产业务层代码

使用代码生成器生成业务代码
shiro整合springboot实战:一、项目搭建和数据库表设计_第1张图片
改造一下User 和 Role 实体类,添加关联关系

@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class User implements Serializable {

    private static final long serialVersionUID=1L;

    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;

    /**
     * 用户名
     */
    private String username;

    /**
     * 密码
     */
    private String password;

    private LocalDateTime createTime;

    private String salt;

    /**
     * 角色集合
     */
    private List roleList = new ArrayList<>();

}
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class Role implements Serializable {

    private static final long serialVersionUID=1L;

    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;

    /**
     * 名称
     */
    private String name;

    /**
     * 描述
     */
    private String description;

    /**
     * 权限集合
     */
    private List permissionList = new ArrayList<>();

}

写一个查询一个用户关联所有的角色,角色再关联相应角色的方法,只贴出mapper.xml文件
UserMapper.xml





    
    
        
        
        
        
        
    

    
    
        id, username, password, create_time, salt
    

    
        
    

    




RoleMapper.xml





    
    
        
        
        
    

    
    
        role.id id,
        role.name name,
        role.description description
    

    
        
    

    



PermissionMapper.xml





    
    
        
        
        
    

    
    
        permission.id id,
        permission.name name,
        permission.url url
    

    



你可能感兴趣的:(shiro,shiro,springboot)