【Shiro】Springboot集成Shiro(一)

简介: 【Shiro】Springboot集成Shiro

1、技术栈

主框架:springboot

响应层:springMVC

持久层:mybatis

事务控制:jta

前端技术:easyui

2、数据库设计

【1】数据库图解

 

sh_user:用户表,一个用户可以有多个角色

sh_role:角色表,一个角色可以有多个资源

sh_resource:资源表

sh_user_role:用户角色中间表

sh_role_resource:角色资源中间表

【2】数据库脚本

sh_user

CREATE TABLE `sh_user` (

 `ID` varchar(36) NOT NULL COMMENT '主键',

 `LOGIN_NAME` varchar(36) DEFAULT NULL COMMENT '登录名称',

 `REAL_NAME` varchar(36) DEFAULT NULL COMMENT '真实姓名',

 `NICK_NAME` varchar(36) DEFAULT NULL COMMENT '昵称',

 `PASS_WORD` varchar(150) DEFAULT NULL COMMENT '密码',

 `SALT` varchar(36) DEFAULT NULL COMMENT '加密因子',

 `SEX` int(11) DEFAULT NULL COMMENT '性别',

 `ZIPCODE` varchar(36) DEFAULT NULL COMMENT '邮箱',

 `ADDRESS` varchar(36) DEFAULT NULL COMMENT '地址',

 `TEL` varchar(36) DEFAULT NULL COMMENT '固定电话',

 `MOBIL` varchar(36) DEFAULT NULL COMMENT '电话',

 `EMAIL` varchar(36) DEFAULT NULL COMMENT '邮箱',

 `DUTIES` varchar(36) DEFAULT NULL COMMENT '职务',

 `SORT_NO` int(11) DEFAULT NULL COMMENT '排序',

 `ENABLE_FLAG` varchar(18) DEFAULT NULL COMMENT '是否有效',

 PRIMARY KEY (`ID`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='用户表';


sh_role

CREATE TABLE `sh_role` (

 `ID` varchar(36) NOT NULL COMMENT '主键',

 `ROLE_NAME` varchar(36) DEFAULT NULL COMMENT '角色名称',

 `LABEL` varchar(36) DEFAULT NULL COMMENT '角色标识',

 `DESCRIPTION` varchar(200) DEFAULT NULL COMMENT '角色描述',

 `SORT_NO` int(36) DEFAULT NULL COMMENT '排序',

 `ENABLE_FLAG` varchar(18) DEFAULT NULL COMMENT '是否有效',

 PRIMARY KEY (`ID`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='用户角色表';

sh_resource

CREATE TABLE `sh_resource` (

 `ID` varchar(36) NOT NULL COMMENT '主键',

 `PARENT_ID` varchar(36) DEFAULT NULL COMMENT '父资源',

 `RESOURCE_NAME` varchar(36) DEFAULT NULL COMMENT '资源名称',

 `REQUEST_PATH` varchar(200) DEFAULT NULL COMMENT '资源路径',

 `LABEL` varchar(200) DEFAULT NULL COMMENT '资源标签',

 `ICON` varchar(20) DEFAULT NULL COMMENT '图标',

 `IS_LEAF` varchar(18) DEFAULT NULL COMMENT '是否叶子节点',

 `RESOURCE_TYPE` varchar(36) DEFAULT NULL COMMENT '资源类型',

 `SORT_NO` int(11) DEFAULT NULL COMMENT '排序',

 `DESCRIPTION` varchar(200) DEFAULT NULL COMMENT '描述',

 `SYSTEM_CODE` varchar(36) DEFAULT NULL COMMENT '系统code',

 `IS_SYSTEM_ROOT` varchar(18) DEFAULT NULL COMMENT '是否根节点',

 `ENABLE_FLAG` varchar(18) DEFAULT NULL COMMENT '是否有效',

 PRIMARY KEY (`ID`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='资源表';


sh_role_resource

CREATE TABLE `sh_role_resource` (

 `ID` varchar(36) NOT NULL,

 `ENABLE_FLAG` varchar(18) DEFAULT NULL,

 `ROLE_ID` varchar(36) DEFAULT NULL,

 `RESOURCE_ID` varchar(36) DEFAULT NULL,

 PRIMARY KEY (`ID`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='角色资源表';

sh_user_role

CREATE TABLE `sh_user_role` (

 `ID` varchar(36) NOT NULL,

 `ENABLE_FLAG` varchar(18) DEFAULT NULL,

 `USER_ID` varchar(36) DEFAULT NULL,

 `ROLE_ID` varchar(36) DEFAULT NULL,

 PRIMARY KEY (`ID`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='用户角色表';

3、项目骨架

 

4、ShiroDbRealm定义

【1】图解

 

【2】原理分析

(1)、ShiroDbRealmImpl继承ShiroDbRealm向上继承AuthorizingRealm,ShiroDbRealmImpl实例化时会创建密码匹配器HashedCredentialsMatcher实例,HashedCredentialsMatcher指定hash次数与方式,交于AuthenticatingRealm

(2)、调用login方法后,最终调用doGetAuthenticationInfo(AuthenticationToken authcToken)方法,拿到SimpleToken的对象,调用UserBridgeService的查找用户方法,把ShiroUser对象、密码和salt交于SimpleAuthenticationInfo去认证

(3)、访问需要鉴权时,调用doGetAuthorizationInfo(PrincipalCollection principals)方法,然后调用UserBridgeService的授权验证


相关文章
|
3天前
|
安全 Java Apache
SpringBoot+Shiro(一)
SpringBoot+Shiro(一)
|
1天前
|
XML Java 关系型数据库
springboot 集成 mybatis-plus 代码生成器
本文介绍了如何在Spring Boot项目中集成MyBatis-Plus代码生成器,包括导入相关依赖坐标、配置快速代码生成器以及自定义代码生成器模板的步骤和代码示例,旨在提高开发效率,快速生成Entity、Mapper、Mapper XML、Service、Controller等代码。
springboot 集成 mybatis-plus 代码生成器
|
1天前
|
Java Spring
springboot 集成 swagger 2.x 和 3.0 以及 Failed to start bean ‘documentationPluginsBootstrapper‘问题的解决
本文介绍了如何在Spring Boot项目中集成Swagger 2.x和3.0版本,并提供了解决Swagger在Spring Boot中启动失败问题“Failed to start bean ‘documentationPluginsBootstrapper’; nested exception is java.lang.NullPointerEx”的方法,包括配置yml文件和Spring Boot版本的降级。
springboot 集成 swagger 2.x 和 3.0 以及 Failed to start bean ‘documentationPluginsBootstrapper‘问题的解决
|
1月前
|
NoSQL 关系型数据库 MySQL
SpringBoot 集成 SpringSecurity + MySQL + JWT 附源码,废话不多直接盘
SpringBoot 集成 SpringSecurity + MySQL + JWT 附源码,废话不多直接盘
88 2
|
1月前
|
SQL Java 数据库连接
springboot+mybatis+shiro项目中使用shiro实现登录用户的权限验证。权限表、角色表、用户表。从不同的表中收集用户的权限、
这篇文章介绍了在Spring Boot + MyBatis + Shiro项目中,如何使用Shiro框架实现登录用户的权限验证,包括用户、角色和权限表的设计,以及通过多个表查询来收集和验证用户权限的方法和代码实现。
springboot+mybatis+shiro项目中使用shiro实现登录用户的权限验证。权限表、角色表、用户表。从不同的表中收集用户的权限、
|
1月前
|
SQL 前端开发 Java
springboot项目中使用shiro实现用户登录以及权限的验证
这篇文章详细介绍了如何在Spring Boot项目中集成Apache Shiro框架来实现用户登录和权限验证,包括项目依赖配置、数据库连接、实体类定义、控制器、服务层、Mapper层以及前端页面的实现,并展示了实际效果和过滤器代码。
springboot项目中使用shiro实现用户登录以及权限的验证
|
1月前
|
NoSQL Java Redis
Spring Boot集成Redis全攻略:高效数据存取,打造性能飞跃的Java微服务应用!
【8月更文挑战第3天】Spring Boot是备受欢迎的微服务框架,以其快速开发与轻量特性著称。结合高性能键值数据库Redis,可显著增强应用性能。集成步骤包括:添加`spring-boot-starter-data-redis`依赖,配置Redis服务器参数,注入`RedisTemplate`或`StringRedisTemplate`进行数据操作。这种集成方案适用于缓存、高并发等场景,有效提升数据处理效率。
315 2
|
1月前
|
Java Spring
【Azure Developer】Springboot 集成 中国区的Key Vault 报错 AADSTS90002: Tenant 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' not found
【Azure Developer】Springboot 集成 中国区的Key Vault 报错 AADSTS90002: Tenant 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' not found
|
1月前
|
Java Spring
【Azure 事件中心】Spring Boot 集成 Event Hub(azure-spring-cloud-stream-binder-eventhubs)指定Partition Key有异常消息
【Azure 事件中心】Spring Boot 集成 Event Hub(azure-spring-cloud-stream-binder-eventhubs)指定Partition Key有异常消息
|
2月前
|
监控 druid Java
spring boot 集成配置阿里 Druid监控配置
spring boot 集成配置阿里 Druid监控配置
186 6