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

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

新聞中心

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

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

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

在Shiro框架中,用戶信息和權(quán)限信息都存儲在數(shù)據(jù)庫中,我們需要在數(shù)據(jù)庫中創(chuàng)建相關(guān)的表結(jié)構(gòu)。Shiro默認的表結(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é)將詳細介紹Shiro安全框架數(shù)據(jù)庫配置文件的每個配置項的作用和參數(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ū)動程序的名稱,jdbcUrl是數(shù)據(jù)庫連接字符串,jdbcUsername和jdbcPassword是數(shù)據(jù)庫的登錄用戶名和密碼。需要注意的是,如果使用非默認的數(shù)據(jù)庫,則需要修改jdbcUrl配置項的內(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]是配置文件的子標簽,它們分別表示用戶表信息、角色表信息、權(quán)限表信息、用戶角色關(guān)系表信息和角色權(quán)限關(guān)系表信息。每個子標簽中的參數(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]

# 查詢單個用戶信息

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

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

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

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

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

三、數(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

[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

# 查詢單個用戶信息

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ā)人員只需要修改其中相應的參數(shù)即可使Shiro框架連接到自己的數(shù)據(jù)庫。

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

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

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

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

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

這個前提條件保證你的principal是username,相信大部分人根據(jù)教程做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,你們的項目可以自行發(fā)揮

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

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

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

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

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

globalUserService.initUserContext(username, subject);

}

}

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

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

}

}

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

如果你用的是spring那么

/** = rememberAuthFilter

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

rememberAuthFilter=com.yqr.jxc.shiro.RememberAuthenticationFilter

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

/** = rememberAuthFilter

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

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

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

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

但是你進行敏感操作的時候還是要重新登錄敲賬號密碼的,也就是必須重新進行Authentication

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

shiro的rememberMe功能就不起作用了

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

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


當前標題:Shiro安全框架數(shù)據(jù)庫配置文件詳解(shiro數(shù)據(jù)庫配置文件)
文章URL:http://www.5511xx.com/article/djdicjd.html