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框架中数据库连接的相关信息、表结构信息和查询语句等。开发人员可以根据自己的需求进行相应的修改和配置。

成都网站建设公司-创新互联为您提供网站建设、网站制作、网页设计及定制高端网站建设服务!

Shiro的 rememberMe 功能使用指导为什么rememberMe设置了没作用

采用这个解决方案的前提是,你必须自己先实现一个realm,不过这个我相信大家都会实现的,毕竟默认的不是jdbcRealm ,真正的项目都是要查数据库才能确定用户是否登录的。那么我就假定大家的项目中都有那么一个负责验证登录的 JdbcRealm, 并且是采用用户名密码认证的,在 doGetAuthenticationInfo 方法里面是采用如下的方法来做认证

info = new SimpleAuthenticationInfo(username, password.toCharArray(), getName());

这个前提条件保证你的principal是username,相信大部分人根据教程做shiro的时候都采用了这种方式

STEP1 复写 FormAuthenticationFilter 的 isAccessAllowed 方法

做一个新类继承FormAuthenticationFilter ,并复写 isAccessAllowed 方法

package com.yqr.jxc.shiro;

import javax.annotation.Resource;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import org.apache.shiro.session.Session;

import org.apache.shiro.subject.Subject;

import org.apache.shiro.web.filter.authc.FormAuthenticationFilter;

import com.yqr.jxc.service.global.GlobalUserService;

public class RememberAuthenticationFilter extends FormAuthenticationFilter {

@Resource(name=”globalUserService”)

private GlobalUserService globalUserService;

/**

* 这个方法决定了是否能让用户登录

*/

@Override

protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) {

Subject subject = getSubject(request, response);

//如果 isAuthenticated 为 false 证明不是登录过的,同时 isRememberd 为true 证明是没登陆直接通过记住我功能进来的

if(!subject.isAuthenticated() && subject.isRemembered()){

//获取session看看是不是空的

Session session = subject.getSession(true);

//随便拿session的一个属性来看session当前是否是空的,我用userId,你们的项目可以自行发挥

if(session.getAttribute(“userId”) == null){

//如果是空的才初始化,否则每次都要初始化,项目得慢死

//这边根据前面的前提假设,拿到的是username

String username = subject.getPrincipal().toString();

//在这个方法里面做初始化用户上下文的事情,比如通过查询数据库来设置session值,你们自己发挥

globalUserService.initUserContext(username, subject);

}

}

//这个方法本来只返回 subject.isAuthenticated() 现在我们加上 subject.isRemembered() 让它同时也兼容remember这种情况

return subject.isAuthenticated() || subject.isRemembered();

}

}

STEP2 设置使用这个新的 AuthenticationFilter (认证过滤器)

如果你用的是spring那么

/** = rememberAuthFilter

如果你用的是 ini 文件,那么

rememberAuthFilter=com.yqr.jxc.shiro.RememberAuthenticationFilter

#将之前的 /** = authc 替换成 rememberAuthFilter

/** = rememberAuthFilter

然后重启项目我们来测试一下,先登录一次系统,然后直接关掉浏览器,然后打开浏览器直接输入系统某个页面的地址,发现可以直接进去了,session什么的也设置好了

官方的文档有说明,isRemembered和isAuthenticated是互斥的

isRemembered是在服务器上记录一个cookie说明你这个用户登陆过并且被记住了

效果类似于亚马逊页面上,他会记住近期登陆过的用户(Subject)

但是你进行敏感操作的时候还是要重新登录敲账号密码的,也就是必须重新进行Authentication

也就是说如果你的拦截器配置了authc或者其他需要认证之后才能使用的

shiro的rememberMe功能就不起作用了

印象中有一个url拦截器可以过滤这个,不记得名字了

香港云服务器机房,创新互联(www.cdcxhl.com)专业云服务器厂商,回大陆优化带宽,安全/稳定/低延迟.创新互联助力企业出海业务,提供一站式解决方案。香港服务器-免备案低延迟-双向CN2+BGP极速互访!

网站名称:Shiro安全框架数据库配置文件详解(shiro数据库配置文件)
标题路径:http://www.shufengxianlan.com/qtweb/news45/313245.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联