一,动态权限管理的优点和缺点
1,优点:
因为控制权限的数据保存在了mysql或其他存储系统中,
可以动态修改权限控制,无需改动代码和重启应用,
权限变更时灵活方便
2,缺点:
权限的设置需要保存在外部存储系统,
每次request时都需要查库处理,
高并发时影响效率
说明:作者:刘宏缔 邮箱: 371125307@qq.com
二,演示项目的相关信息
1,项目地址:
https://github.com/liuhongdi/securitydynamic
2,项目功能说明
通过修改mysql数据库中的数据,
实现对权限验证的动态控制,无需修改代码和重启应用
3,项目结构:如图:
三,配置文件说明
1,pom.xml
org.springframework.boot
spring-boot-starter-security
org.springframework.boot
spring-boot-starter-thymeleaf
org.springframework.boot
spring-boot-starter-validation
org.mybatis.spring.boot
mybatis-spring-boot-starter
2.1.3
mysql
mysql-connector-java
runtime
com.alibaba
fastjson
1.2.72
2,application.properties:
#thymeleaf
spring.thymeleaf.cache=falsespring.thymeleaf.encoding=UTF-8spring.thymeleaf.mode=HTML
spring.thymeleaf.prefix=classpath:/templates/spring.thymeleaf.suffix=.html
#mysql
spring.datasource.url=jdbc:mysql://localhost:3306/security?characterEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password=lhddemo
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#mybatis
mybatis.mapper-locations=classpath:/mapper/*Mapper.xml
mybatis.type-aliases-package=com.example.demo.mapper
#error
server.error.include-stacktrace=always
#log
logging.level.org.springframework.web=trace
logging.level.org.springframework.security=debug
3,数据库:
建立各个表的sql:
CREATE TABLE`sys_user` (
`userId`int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
`userName`varchar(100) NOT NULL DEFAULT '' COMMENT '用户名',
`password`varchar(100) NOT NULL DEFAULT '' COMMENT '密码',
`nickName`varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '昵称',PRIMARY KEY(`userId`),UNIQUE KEY`userName` (`userName`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户表'
INSERT INTO `sys_user` (`userId`, `userName`, `password`, `nickName`) VALUES(1, 'lhd', '$2a$10$yGcOz3ekNI6Ya67tqQueS.raxyTOedGsv5jh2BwtRrI5/K9QEIPGq', '老刘'),
(2, 'admin', '$2a$10$yGcOz3ekNI6Ya67tqQueS.raxyTOedGsv5jh2BwtRrI5/K9QEIPGq', '管理员'),
(3, 'merchant', '$2a$10$yGcOz3ekNI6Ya67tqQueS.raxyTOedGsv5jh2BwtRrI5/K9QEIPGq', '商户老张');
CREATE TABLE`sys_user_role` (
`urId`int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
`userId`int(11) NOT NULL DEFAULT '0' COMMENT '用户id',
`roleName`varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '角色id',PRIMARY KEY(`urId`),UNIQUE KEY`userId` (`userId`,`roleName`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户角色关联表'
INSERT INTO `sys_user_role` (`urId`, `userId`, `roleName`) VALUES(1, 2, 'ADMIN'),
(2, 3, 'MERCHANT');
CREATE TABLE`sys