JDBCRealm的使用
通过非默认的语句来查询认证和角色的信息。
打开权限开关
默认的表,默认的语句
jdbcRealm设置数据源
6666666666666666666666
JdbcRealm 自己默认有验证的SQL语句.
SecurityManager设置Realm
SecurityUtils设置SecurityManager
SecurityUtils获取Subject对象
Subject对象来做认证
认证载体是:Realm
Reaml有三种类:
SimpleAccountRealm(内存),
IniRealm(配置文件),
JdbcRealmTest(数据库)
JdbcRealm通过sql查询用户角色信息
JdbcRealm通过sql查询用户数据
JdbcRealm初始化dataSource
JdbcRealm方式授权认证
自定义sql语句查询
使用jdbcRealm需要设置权限的开关,默认为false;
jdbcRealm.setPermissionsLookupEnabled(true);
否则可能获取权限失败
/*
数据表
SQLyog Ultimate v12.09 (64 bit)
MySQL - 5.5.53 : Database - shiro
*********************************************************************
*/
/*!40101 SET NAMES utf8 */;
/*!40101 SET SQL_MODE=''*/;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
/*Table structure for table `roles_permissions` */
DROP TABLE IF EXISTS `roles_permissions`;
CREATE TABLE `roles_permissions` (
`permission` varchar(100) DEFAULT NULL COMMENT '权限',
`role_name` varchar(100) DEFAULT NULL COMMENT '角色名',
`id` int(11) NOT NULL COMMENT '主键',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='角色权限表';
/*Data for the table `roles_permissions` */
insert into `roles_permissions`(`permission`,`role_name`,`id`) values ('test:user:delete','admin',1),('test:user:update','admin',2);
/*Table structure for table `user_roles` */
DROP TABLE IF EXISTS `user_roles`;
CREATE TABLE `user_roles` (
`id` int(11) NOT NULL COMMENT '主键',
`username` varchar(100) NOT NULL COMMENT '用户名',
`role_name` varchar(100) NOT NULL COMMENT '角色名',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*Data for the table `user_roles` */
insert into `user_roles`(`id`,`username`,`role_name`) values (0,'Mark','user'),(1,'Mark','admin');
/*Table structure for table `users` */
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
`username` varchar(100) DEFAULT NULL,
`password` varchar(100) DEFAULT NULL,
`id` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='shiro的表';
/*Data for the table `users` */
insert into `users`(`username`,`password`,`id`) values ('Mark','123456','1');
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
角色权限表
id role_name permission
用户角色表
id username role_name
JDbcRealm
1、设置数据源
2、设置Real
自定义sql语句
jdbcRealm需要设置权限开关
给jdbcRealm配置数据源
通过jdbcRealm查询数据库
权限认证的代码。与角色认证稍有不同,需要弄清楚的是一个用户可能用多个角色身份。一种角色身份可能有多种权限。
JDBC的POM.XML
mysql,druid
sql文件: roles_permissions, test_user, test_user_role, user_roles, users.
test_user_role.sql
JdbcRealm讲解(上)
JdbcRealm讲解(中)