日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Shiro安全框架數(shù)據(jù)庫配置文件詳解(shiro數(shù)據(jù)庫配置文件)

Shiro是一個(gè)Java安全框架,它提供了認(rèn)證、授權(quán)、加密等安全功能,廣泛應(yīng)用于企業(yè)級(jí)應(yīng)用程序的開發(fā)中。Shiro的配置文件中包含了很多重要的參數(shù)和配置信息,其中數(shù)據(jù)庫配置文件是非常關(guān)鍵的一部分。本文將詳細(xì)介紹Shiro安全框架數(shù)據(jù)庫配置文件的內(nèi)容和作用。

一、數(shù)據(jù)庫中的表結(jié)構(gòu)

在Shiro框架中,用戶信息和權(quán)限信息都存儲(chǔ)在數(shù)據(jù)庫中,我們需要在數(shù)據(jù)庫中創(chuàng)建相關(guān)的表結(jié)構(gòu)。Shiro默認(rèn)的表結(jié)構(gòu)如下:

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 ‘狀態(tài)(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 ‘狀態(tài)(0:可用,1:不可用)’,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=’角色表’;

3.權(quán)限表

CREATE TABLE `sys_permission` (

`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT ‘權(quán)限id’,

`permission_name` varchar(50) NOT NULL COMMENT ‘權(quán)限名稱’,

`permission_url` varchar(200) DEFAULT NULL COMMENT ‘權(quán)限URL’,

`avlable` tinyint(4) NOT NULL DEFAULT ‘0’ COMMENT ‘狀態(tài)(0:可用,1:不可用)’,

`parent_id` bigint(20) DEFAULT NULL COMMENT ‘父權(quán)限id’,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=’權(quán)限表’;

4.用戶角色關(guān)系表

CREATE TABLE `sys_user_role` (

`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT ‘用戶角色關(guān)系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=’用戶角色關(guān)系表’;

5.角色權(quán)限關(guān)系表

CREATE TABLE `sys_role_permission` (

`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT ‘角色權(quán)限關(guān)系id’,

`role_id` bigint(20) NOT NULL COMMENT ‘角色id’,

`permission_id` bigint(20) NOT NULL COMMENT ‘權(quán)限id’,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=’角色權(quán)限關(guān)系表’;

二、數(shù)據(jù)庫配置文件

Shiro安全框架的數(shù)據(jù)庫配置文件是Shiro的核心配置之一,它保存了Shiro框架中數(shù)據(jù)庫連接的相關(guān)信息、表結(jié)構(gòu)信息和查詢語句等。本節(jié)將詳細(xì)介紹Shiro安全框架數(shù)據(jù)庫配置文件的每個(gè)配置項(xiàng)的作用和參數(shù)設(shè)置方法。

1.數(shù)據(jù)庫連接信息配置

Shiro框架需要連接數(shù)據(jù)庫才能讀取用戶信息和權(quán)限信息,因此,數(shù)據(jù)庫連接信息是配置文件中最重要的一部分。下面是Shiro框架的數(shù)據(jù)庫連接信息配置模板:

[mn]

# 數(shù)據(jù)庫連接配置

jdbcDriver = com.mysql.jdbc.Driver

jdbcUrl = jdbc:mysql://localhost:3306/shiro?useUnicode=true&characterEncoding=utf8

jdbcUsername = root

jdbcPassword = root

其中,jdbcDriver是數(shù)據(jù)庫驅(qū)動(dòng)程序的名稱,jdbcUrl是數(shù)據(jù)庫連接字符串,jdbcUsername和jdbcPassword是數(shù)據(jù)庫的登錄用戶名和密碼。需要注意的是,如果使用非默認(rèn)的數(shù)據(jù)庫,則需要修改jdbcUrl配置項(xiàng)的內(nèi)容。

2.表結(jié)構(gòu)信息配置

Shiro框架需要讀取數(shù)據(jù)庫中的用戶信息表、角色信息表和權(quán)限信息表,并且根據(jù)它們的關(guān)系建立用戶角色關(guān)系表和角色權(quán)限關(guān)系表。下面是Shiro框架的數(shù)據(jù)庫表結(jié)構(gòu)信息配置模板:

[roles]

# 用戶信息表名稱

userTable = sys_user

# 用戶名字段名稱

usernameColumn = username

# 密碼字段名稱

passwordColumn = password

# 鹽值字段名稱

saltColumn = salt

[roles]

# 角色信息表名稱

roleTable = sys_role

# 角色名字段名稱

roleNameColumn = role_name

# 角色描述字段名稱

roleDescColumn = role_desc

# 是否可用字段名稱

roleAvlableColumn=avlable

[permissions]

# 權(quán)限信息表名稱

permissionTable = sys_permission

# 權(quán)限名字段名稱

permissionNameColumn = permission_name

# 權(quán)限url字段名稱

permissionUrlColumn = permission_url

# 是否可用字段名稱

permissionAvlableColumn = avlable

# 父權(quán)限id字段名稱

permissionParentColumn = parent_id

[user_role]

# 用戶角色關(guān)系表名稱

userRoleTable = sys_user_role

# 用戶id字段名稱

userIdColumn = user_id

# 角色id字段名稱

roleIdColumn = role_id

[role_permission]

# 角色權(quán)限關(guān)系表名稱

rolePermissionTable = sys_role_permission

# 角色id字段名稱

roleIdColumn = role_id

# 權(quán)限id字段名稱

permissionIdColumn = permission_id

其中,[roles]、[permissions]、[user_role]和[role_permission]是配置文件的子標(biāo)簽,它們分別表示用戶表信息、角色表信息、權(quán)限表信息、用戶角色關(guān)系表信息和角色權(quán)限關(guān)系表信息。每個(gè)子標(biāo)簽中的參數(shù)名稱和作用如下:

userTable:用戶信息表名稱

usernameColumn:用戶名字段名稱

passwordColumn:密碼字段名稱

saltColumn:鹽值字段名稱

roleTable:角色信息表名稱

roleNameColumn:角色名字段名稱

roleDescColumn:角色描述字段名稱

roleAvlableColumn:是否可用字段名稱

permissionTable:權(quán)限信息表名稱

permissionNameColumn:權(quán)限名字段名稱

permissionUrlColumn:權(quán)限url字段名稱

permissionAvlableColumn:是否可用字段名稱

permissionParentColumn:父權(quán)限id字段名稱

userRoleTable:用戶角色關(guān)系表名稱

userIdColumn:用戶id字段名稱

roleIdColumn:角色id字段名稱

rolePermissionTable:角色權(quán)限關(guān)系表名稱

roleIdColumn:角色id字段名稱

permissionIdColumn:權(quán)限id字段名稱

3.查詢語句配置

Shiro框架使用SQL語句查詢數(shù)據(jù)庫中的用戶信息和權(quán)限信息,查詢語句包括查詢所有用戶信息、查詢用戶角色信息、查詢角色權(quán)限信息等。下面是Shiro框架的查詢語句配置模板:

[roles]

# 查詢單個(gè)用戶信息

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

# 查詢角色權(quán)限信息

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]是配置文件的子標(biāo)簽,它表示角色信息相關(guān)查詢語句。每個(gè)子標(biāo)簽中的參數(shù)名稱和作用如下:

userSql:查詢單個(gè)用戶信息的SQL語句,其中?表示用戶名參數(shù)

rolesSql:查詢用戶角色信息的SQL語句,其中?表示用戶名參數(shù)

allRolesSql:查詢所有角色信息的SQL語句

permissionsSql:查詢角色權(quán)限信息的SQL語句,其中?表示角色名參數(shù)

三、數(shù)據(jù)庫配置文件示例

下面是一個(gè)完整的Shiro安全框架數(shù)據(jù)庫配置文件示例:

[mn]

# 數(shù)據(jù)庫連接配置

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

# 權(quán)限表信息

permissionTable = sys_permission

permissionNameColumn = permission_name

permissionUrlColumn = permission_url

permissionAvlableColumn = avlable

permissionParentColumn = parent_id

# 用戶角色關(guān)系表信息

userRoleTable = sys_user_role

userIdColumn = user_id

roleIdColumn = role_id

# 角色權(quán)限關(guān)系表信息

rolePermissionTable = sys_role_permission

roleIdColumn = role_id

permissionIdColumn = permission_id

# 查詢單個(gè)用戶信息

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

# 查詢角色權(quán)限信息

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 = ?)

上述配置文件中,包括了數(shù)據(jù)庫連接信息、表信息和查詢語句信息,開發(fā)人員只需要修改其中相應(yīng)的參數(shù)即可使Shiro框架連接到自己的數(shù)據(jù)庫。

Shiro安全框架的數(shù)據(jù)庫配置文件是Shiro功能完整性的關(guān)鍵之一,它保存了Shiro框架中數(shù)據(jù)庫連接的相關(guān)信息、表結(jié)構(gòu)信息和查詢語句等。開發(fā)人員可以根據(jù)自己的需求進(jìn)行相應(yīng)的修改和配置。

成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián)為您提供網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù)!

Shiro的 rememberMe 功能使用指導(dǎo)為什么rememberMe設(shè)置了沒作用

采用這個(gè)解決方案的前提是,你必須自己先實(shí)現(xiàn)一個(gè)realm,不過這個(gè)我相信大家都會(huì)實(shí)現(xiàn)的,畢竟默認(rèn)的不是jdbcRealm ,真正的項(xiàng)目都是要查數(shù)據(jù)庫才能確定用戶是否登錄的。那么我就假定大家的項(xiàng)目中都有那么一個(gè)負(fù)責(zé)驗(yàn)證登錄的 JdbcRealm, 并且是采用用戶名密碼認(rèn)證的,在 doGetAuthenticationInfo 方法里面是采用如下的方法來做認(rèn)證

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

這個(gè)前提條件保證你的principal是username,相信大部分人根據(jù)教程做shiro的時(shí)候都采用了這種方式

STEP1 復(fù)寫 FormAuthenticationFilter 的 isAccessAllowed 方法

做一個(gè)新類繼承FormAuthenticationFilter ,并復(fù)寫 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;

/**

* 這個(gè)方法決定了是否能讓用戶登錄

*/

@Override

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

Subject subject = getSubject(request, response);

//如果 isAuthenticated 為 false 證明不是登錄過的,同時(shí) isRememberd 為true 證明是沒登陸直接通過記住我功能進(jìn)來的

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

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

Session session = subject.getSession(true);

//隨便拿session的一個(gè)屬性來看session當(dāng)前是否是空的,我用userId,你們的項(xiàng)目可以自行發(fā)揮

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

//如果是空的才初始化,否則每次都要初始化,項(xiàng)目得慢死

//這邊根據(jù)前面的前提假設(shè),拿到的是username

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

//在這個(gè)方法里面做初始化用戶上下文的事情,比如通過查詢數(shù)據(jù)庫來設(shè)置session值,你們自己發(fā)揮

globalUserService.initUserContext(username, subject);

}

}

//這個(gè)方法本來只返回 subject.isAuthenticated() 現(xiàn)在我們加上 subject.isRemembered() 讓它同時(shí)也兼容remember這種情況

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

}

}

STEP2 設(shè)置使用這個(gè)新的 AuthenticationFilter (認(rèn)證過濾器)

如果你用的是spring那么

/** = rememberAuthFilter

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

rememberAuthFilter=com.yqr.jxc.shiro.RememberAuthenticationFilter

#將之前的 /** = authc 替換成 rememberAuthFilter

/** = rememberAuthFilter

然后重啟項(xiàng)目我們來測試一下,先登錄一次系統(tǒng),然后直接關(guān)掉瀏覽器,然后打開瀏覽器直接輸入系統(tǒng)某個(gè)頁面的地址,發(fā)現(xiàn)可以直接進(jìn)去了,session什么的也設(shè)置好了

官方的文檔有說明,isRemembered和isAuthenticated是互斥的

isRemembered是在服務(wù)器上記錄一個(gè)cookie說明你這個(gè)用戶登陸過并且被記住了

效果類似于亞馬遜頁面上,他會(huì)記住近期登陸過的用戶(Subject)

但是你進(jìn)行敏感操作的時(shí)候還是要重新登錄敲賬號(hào)密碼的,也就是必須重新進(jìn)行Authentication

也就是說如果你的攔截器配置了authc或者其他需要認(rèn)證之后才能使用的

shiro的rememberMe功能就不起作用了

印象中有一個(gè)url攔截器可以過濾這個(gè),不記得名字了

香港云服務(wù)器機(jī)房,創(chuàng)新互聯(lián)(www.cdcxhl.com)專業(yè)云服務(wù)器廠商,回大陸優(yōu)化帶寬,安全/穩(wěn)定/低延遲.創(chuàng)新互聯(lián)助力企業(yè)出海業(yè)務(wù),提供一站式解決方案。香港服務(wù)器-免備案低延遲-雙向CN2+BGP極速互訪!


新聞名稱:Shiro安全框架數(shù)據(jù)庫配置文件詳解(shiro數(shù)據(jù)庫配置文件)
網(wǎng)頁路徑:http://m.5511xx.com/article/djdicjd.html