Shiro安全框架数据库配置文件详解 (shiro 数据库配置文件)
Shiro是一个Java安全框架,它提供了认证、授权、加密等安全功能,广泛应用于企业级应用程序的开发中。Shiro的配置文件中包含了很多重要的参数和配置信息,其中数据库配置文件是非常关键的一部分。本文将详细介绍Shiro安全框架数据库配置文件的内容和作用。
一、数据库中的表结构
在Shiro框架中,用户信息和权限信息都存储在数据库中,我们需要在数据库中创建相关的表结构。Shiro默认的表结构如下:
1.用户表
CREATE TABLE `sys_user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT ‘用户id’,
`username` varchar(50) NOT NULL COMMENT ‘用户名’,
`password` varchar(100) NOT NULL COMMENT ‘密码’,
`salt` varchar(50) DEFAULT NULL COMMENT ‘盐值’,
`state` tinyint(4) NOT NULL DEFAULT ‘0’ COMMENT ‘状态(0:正常,1:锁定)’,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=’用户表’;
2.角色表
CREATE TABLE `sys_role` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT ‘角色id’,
`role_name` varchar(50) NOT NULL COMMENT ‘角色名称’,
`role_desc` varchar(100) DEFAULT NULL COMMENT ‘角色描述’,
`avlable` tinyint(4) NOT NULL DEFAULT ‘0’ COMMENT ‘状态(0:可用,1:不可用)’,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=’角色表’;
3.权限表
CREATE TABLE `sys_permission` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT ‘权限id’,
`permission_name` varchar(50) NOT NULL COMMENT ‘权限名称’,
`permission_url` varchar(200) DEFAULT NULL COMMENT ‘权限URL’,
`avlable` tinyint(4) NOT NULL DEFAULT ‘0’ COMMENT ‘状态(0:可用,1:不可用)’,
`parent_id` bigint(20) DEFAULT NULL COMMENT ‘父权限id’,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=’权限表’;
4.用户角色关系表
CREATE TABLE `sys_user_role` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT ‘用户角色关系id’,
`user_id` bigint(20) NOT NULL COMMENT ‘用户id’,
`role_id` bigint(20) NOT NULL COMMENT ‘角色id’,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=’用户角色关系表’;
5.角色权限关系表
CREATE TABLE `sys_role_permission` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT ‘角色权限关系id’,
`role_id` bigint(20) NOT NULL COMMENT ‘角色id’,
`permission_id` bigint(20) NOT NULL COMMENT ‘权限id’,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=’角色权限关系表’;
二、数据库配置文件
Shiro安全框架的数据库配置文件是Shiro的核心配置之一,它保存了Shiro框架中数据库连接的相关信息、表结构信息和查询语句等。本节将详细介绍Shiro安全框架数据库配置文件的每个配置项的作用和参数设置方法。
1.数据库连接信息配置
Shiro框架需要连接数据库才能读取用户信息和权限信息,因此,数据库连接信息是配置文件中最重要的一部分。下面是Shiro框架的数据库连接信息配置模板:
[mn]
# 数据库连接配置
jdbcDriver = com.mysql.jdbc.Driver
jdbcUrl = jdbc:mysql://localhost:3306/shiro?useUnicode=true&characterEncoding=utf8
jdbcUsername = root
jdbcPassword = root
其中,jdbcDriver是数据库驱动程序的名称,jdbcUrl是数据库连接字符串,jdbcUsername和jdbcPassword是数据库的登录用户名和密码。需要注意的是,如果使用非默认的数据库,则需要修改jdbcUrl配置项的内容。
2.表结构信息配置
Shiro框架需要读取数据库中的用户信息表、角色信息表和权限信息表,并且根据它们的关系建立用户角色关系表和角色权限关系表。下面是Shiro框架的数据库表结构信息配置模板:
[roles]
# 用户信息表名称
userTable = sys_user
# 用户名字段名称
usernameColumn = username
# 密码字段名称
passwordColumn = password
# 盐值字段名称
saltColumn = salt
[roles]
# 角色信息表名称
roleTable = sys_role
# 角色名字段名称
roleNameColumn = role_name
# 角色描述字段名称
roleDescColumn = role_desc
# 是否可用字段名称
roleAvlableColumn=avlable
[permissions]
# 权限信息表名称
permissionTable = sys_permission
# 权限名字段名称
permissionNameColumn = permission_name
# 权限url字段名称
permissionUrlColumn = permission_url
# 是否可用字段名称
permissionAvlableColumn = avlable
# 父权限id字段名称
permissionParentColumn = parent_id
[user_role]
# 用户角色关系表名称
userRoleTable = sys_user_role
# 用户id字段名称
userIdColumn = user_id
# 角色id字段名称
roleIdColumn = role_id
[role_permission]
# 角色权限关系表名称
rolePermissionTable = sys_role_permission
# 角色id字段名称
roleIdColumn = role_id
# 权限id字段名称
permissionIdColumn = permission_id
其中,[roles]、[permissions]、[user_role]和[role_permission]是配置文件的子标签,它们分别表示用户表信息、角色表信息、权限表信息、用户角色关系表信息和角色权限关系表信息。每个子标签中的参数名称和作用如下:
userTable:用户信息表名称
usernameColumn:用户名字段名称
passwordColumn:密码字段名称
saltColumn:盐值字段名称
roleTable:角色信息表名称
roleNameColumn:角色名字段名称
roleDescColumn:角色描述字段名称
roleAvlableColumn:是否可用字段名称
permissionTable:权限信息表名称
permissionNameColumn:权限名字段名称
permissionUrlColumn:权限url字段名称
permissionAvlableColumn:是否可用字段名称
permissionParentColumn:父权限id字段名称
userRoleTable:用户角色关系表名称
userIdColumn:用户id字段名称
roleIdColumn:角色id字段名称
rolePermissionTable:角色权限关系表名称
roleIdColumn:角色id字段名称
permissionIdColumn:权限id字段名称
3.查询语句配置
Shiro框架使用SQL语句查询数据库中的用户信息和权限信息,查询语句包括查询所有用户信息、查询用户角色信息、查询角色权限信息等。下面是Shiro框架的查询语句配置模板:
[roles]
# 查询单个用户信息
userSql = select password,salt from sys_user where username = ?
# 查询用户角色信息
rolesSql = select r.role_name from sys_user_role ur, sys_role r where ur.role_id = r.id and ur.user_id = (select id from sys_user where username = ?)
# 查询所有角色信息
allRolesSql = select role_name from sys_role
# 查询角色权限信息
permissionsSql = select p.permission_name from sys_role_permission rp,sys_permission p where rp.permission_id = p.id and rp.role_id = (select id from sys_role where role_name = ?)
其中,[roles]是配置文件的子标签,它表示角色信息相关查询语句。每个子标签中的参数名称和作用如下:
userSql:查询单个用户信息的SQL语句,其中?表示用户名参数
rolesSql:查询用户角色信息的SQL语句,其中?表示用户名参数
allRolesSql:查询所有角色信息的SQL语句
permissionsSql:查询角色权限信息的SQL语句,其中?表示角色名参数
三、数据库配置文件示例
下面是一个完整的Shiro安全框架数据库配置文件示例:
[mn]
# 数据库连接配置
jdbcDriver = com.mysql.jdbc.Driver
jdbcUrl = jdbc:mysql://localhost:3306/shiro?useUnicode=true&characterEncoding=utf8
jdbcUsername = root
jdbcPassword = root
[roles]
# 用户表信息
userTable = sys_user
usernameColumn = username
passwordColumn = password
saltColumn = salt
# 角色表信息
roleTable = sys_role
roleNameColumn = role_name
roleDescColumn = role_desc
roleAvlableColumn=avlable
# 权限表信息
permissionTable = sys_permission
permissionNameColumn = permission_name
permissionUrlColumn = permission_url
permissionAvlableColumn = avlable
permissionParentColumn = parent_id
# 用户角色关系表信息
userRoleTable = sys_user_role
userIdColumn = user_id
roleIdColumn = role_id
# 角色权限关系表信息
rolePermissionTable = sys_role_permission
roleIdColumn = role_id
permissionIdColumn = permission_id
# 查询单个用户信息
userSql = select password,salt from sys_user where username = ?
# 查询用户角色信息
rolesSql = select r.role_name from sys_user_role ur, sys_role r where ur.role_id = r.id and ur.user_id = (select id from sys_user where username = ?)
# 查询所有角色信息
allRolesSql = select role_name from sys_role
# 查询角色权限信息
permissionsSql = select p.permission_name from sys_role_permission rp,sys_permission p where rp.permission_id = p.id and rp.role_id = (select id from sys_role where role_name = ?)
上述配置文件中,包括了数据库连接信息、表信息和查询语句信息,开发人员只需要修改其中相应的参数即可使Shiro框架连接到自己的数据库。
Shiro安全框架的数据库配置文件是Shiro功能完整性的关键之一,它保存了Shiro框架中数据库连接的相关信息、表结构信息和查询语句等。开发人员可以根据自己的需求进行相应的修改和配置。