新聞中心
隨著Web應(yīng)用的不斷發(fā)展,用戶的需求越來越高,安全性逐漸成為一個核心問題。在Java開發(fā)中,Shiro是一個優(yōu)秀的安全框架,能夠?qū)崿F(xiàn)身份驗(yàn)證、授權(quán)、密碼加密等功能。其中,Shiro的數(shù)據(jù)庫驗(yàn)證是非常重要的一部分。本文將詳細(xì)介紹Shiro實(shí)現(xiàn)數(shù)據(jù)庫驗(yàn)證的方法。

1. Shiro簡介
Shiro是一個功能強(qiáng)大的Java安全框架,它提供了身份驗(yàn)證、授權(quán)、密碼加密等一系列安全相關(guān)的功能。Shiro的設(shè)計目標(biāo)是為Java應(yīng)用程序提供安全保障,既可以在Web應(yīng)用程序中使用,也可以在任何應(yīng)用程序中使用。Shiro的更大特點(diǎn)是易于使用、易于理解、易于擴(kuò)展。
2. Shiro數(shù)據(jù)庫驗(yàn)證
在Web應(yīng)用程序中,用戶登錄是一個很常見的操作。Shiro提供了多種身份驗(yàn)證方式,其中數(shù)據(jù)庫驗(yàn)證是一種常見而且重要的驗(yàn)證方式。Shiro的數(shù)據(jù)庫驗(yàn)證主要是通過JDBC進(jìn)行實(shí)現(xiàn)的。在進(jìn)行數(shù)據(jù)庫驗(yàn)證時,需要先配置數(shù)據(jù)源和Realm。
2.1 數(shù)據(jù)源配置
數(shù)據(jù)源是Shiro進(jìn)行數(shù)據(jù)庫驗(yàn)證的關(guān)鍵,因此需要進(jìn)行正確的配置。在配置數(shù)據(jù)源時,可以使用JNDI或者直接使用DriverManager來創(chuàng)建數(shù)據(jù)源。下面是一段使用JNDI方式配置數(shù)據(jù)源的代碼:
“`xml
maxIdle=”100″ maxActive=”500″ maxWt=”10000″
username=”test” password=”test” driverClassName=”com.mysql.jdbc.Driver”
url=”jdbc:mysql://localhost:3306/test”/>
“`
在上面的配置中,標(biāo)簽定義了一個數(shù)據(jù)源,name屬性指定了數(shù)據(jù)源的名稱,type屬性指定了數(shù)據(jù)源的類型,url屬性指定了連接數(shù)據(jù)庫的URL,username屬性指定了連接數(shù)據(jù)庫的用戶名,password屬性指定了連接數(shù)據(jù)庫的密碼。
2.2 Realm配置
在Shiro中,Realm是進(jìn)行用戶身份驗(yàn)證、權(quán)限驗(yàn)證的關(guān)鍵。對于數(shù)據(jù)庫驗(yàn)證來說,需要自定義一個Realm,并配置相應(yīng)的數(shù)據(jù)源。下面是一個基于JDBC的Realm的代碼示例:
“`java
public class JdbcRealm extends JdbcRealm {
public JdbcRealm() {
super.setDataSource(MyJdbcUtils.getDataSource());
super.setAuthenticationQuery(“SELECT password FROM users WHERE username = ?”);
super.setUserRolesQuery(“SELECT role_name FROM user_roles WHERE username = ?”);
super.setPermissionsQuery(“SELECT permission FROM roles_permissions WHERE role_name = ?”);
}
}
“`
在上面的配置中,setDataSource()方法設(shè)置了數(shù)據(jù)源,setAuthenticationQuery()方法設(shè)置了驗(yàn)證用戶信息的SQL語句,setUserRolesQuery()方法設(shè)置了查詢用戶角色信息的SQL語句,setPermissionsQuery()方法設(shè)置了查詢用戶權(quán)限信息的SQL語句。用戶角色和權(quán)限信息可以在數(shù)據(jù)庫中自定義,這里就不再做詳細(xì)介紹。
3. Shiro數(shù)據(jù)庫驗(yàn)證流程
當(dāng)用戶進(jìn)行Web應(yīng)用程序的登錄操作時,Shiro的數(shù)據(jù)庫驗(yàn)證流程如下:
1. 用戶向服務(wù)器發(fā)送登錄請求;
2. 服務(wù)器將請求轉(zhuǎn)發(fā)給Shiro進(jìn)行處理;
3. Shiro判斷請求中的用戶名和密碼是否正確;
4. 如果用戶名和密碼正確,則將該用戶信息保存在Subject對象中;
5. 如果用戶名和密碼不正確,則返回登錄失敗的信息。
4.
相關(guān)問題拓展閱讀:
- SpringBoot進(jìn)階之整合Shiro實(shí)現(xiàn)緩存和會話管理
SpringBoot進(jìn)階之整合Shiro實(shí)現(xiàn)緩存和會話管理
大家好,一直以來我都本著用最通俗的話理解核心的知識點(diǎn), 我認(rèn)為所有的難點(diǎn)都離不開
「基礎(chǔ)知識」
的鋪墊。目前正在出一個
SpringBoot
長期系列教程,從入門到進(jìn)階, 篇幅會較多~
「大佬可以繞過 ~」
如果你是一路看過來的,很高興你能夠耐心看完。之前帶大家學(xué)了
Springboot
基礎(chǔ)部分,對基本的使用有了初步的認(rèn)識, 接下來的幾期內(nèi)容將會帶大家進(jìn)階使用,會先講解基礎(chǔ)
中間件
的使用和一些場景的應(yīng)用,或許這些技術(shù)你聽說過,沒看過也沒關(guān)系,沖前檔我會帶大家一步一步的入門,耐心看完你一定會有
收獲
~
上期帶大家學(xué)習(xí)了
Shiro
中如何進(jìn)行權(quán)限認(rèn)證,本期將帶大家學(xué)習(xí)
Shiro
中如何進(jìn)行
緩存和會話管理
,最后我們將做一個在線用戶管理以及強(qiáng)制下線用悔乎戶的功能,同樣的,我們集成到
Springboot
中。
首先我們要明白使用緩存的原因,為啥要用它 還記得之前帶大家實(shí)現(xiàn)的
用戶認(rèn)證
和
權(quán)限認(rèn)證
嗎,那里我使用了
MockUser
,真實(shí)場景中是要去數(shù)據(jù)查詢的,這樣一來就會產(chǎn)生耗時,請求多的時候數(shù)據(jù)庫肯定忙不過來了,所以我們需要使用緩存來提高程序響應(yīng)速度
緩存使用
Redis
,下面就帶大家整一下:
修改
ShiroConfig
,添加方法
這樣就可以了,大家可以把測試獲取用戶的地方改成數(shù)據(jù)庫獲取,看下
控制臺
sql日志會明顯減少,因?yàn)橛幸徊糠质菑木彺婺玫?/p>
這部分功能還是比較好玩的,學(xué)完可以自由發(fā)揮做一個房間功能,可以加入可以踢人,下面我們就開整
修改
ShiroConfig
,添加方法,因?yàn)槲覀兪褂玫氖?/p>
Redis
緩存
實(shí)現(xiàn)
SessionListener
最后同樣的,想要開啟需要我們注入到
Manager
中:
我們先定義一個類,用來記錄在線用戶:
那么怎么獲取呢?我們定義一個方法,大家實(shí)踐中可以抽到
Service
層,這里方便演示,我直接寫到控制器里
如果你看誰不爽,可以直接讓他下線,hhh~
是不是很簡單,這里就不演示了,大家自行試試
本期內(nèi)容就到這里結(jié)束了,總散亂結(jié)一下,本節(jié)主要講了
Shiro
如何進(jìn)行緩存以及如何進(jìn)行用戶會話管理,大家可以舉一反三,做一些小功能嘗試嘗試
下期給大家講講
Shiro
中如何整合
JWT
,這個大家應(yīng)該不陌生,如果不知道啥是
JWT
也沒關(guān)系,我會帶大家一步一步入門,下期也是
Shiro
系列的終極篇,內(nèi)容可能有點(diǎn)多,耐心看完哦。歡迎加群一起學(xué)習(xí)交流 ~
關(guān)于shiro 數(shù)據(jù)庫驗(yàn)證的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
創(chuàng)新互聯(lián)服務(wù)器托管擁有成都T3+級標(biāo)準(zhǔn)機(jī)房資源,具備完善的安防設(shè)施、三線及BGP網(wǎng)絡(luò)接入帶寬達(dá)10T,機(jī)柜接入千兆交換機(jī),能夠有效保證服務(wù)器托管業(yè)務(wù)安全、可靠、穩(wěn)定、高效運(yùn)行;創(chuàng)新互聯(lián)專注于成都服務(wù)器托管租用十余年,得到成都等地區(qū)行業(yè)客戶的一致認(rèn)可。
新聞名稱:Shiro實(shí)現(xiàn)數(shù)據(jù)庫驗(yàn)證的方法詳解(shiro數(shù)據(jù)庫驗(yàn)證)
網(wǎng)站鏈接:http://m.5511xx.com/article/djidjeh.html


咨詢
建站咨詢
