Shiro中的Realm怎么使用

這篇文章主要介紹“Shiro中的Realm怎么使用”,在日常操作中,相信很多人在Shiro中的Realm怎么使用問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Shiro中的Realm怎么使用”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:主機(jī)域名、網(wǎng)頁空間、營銷軟件、網(wǎng)站建設(shè)、鄰水網(wǎng)站維護(hù)、網(wǎng)站推廣。

Realm的繼承關(guān)系

通過查看類的繼承關(guān)系,我們發(fā)現(xiàn) Realm 的子類實(shí)際上有很多種,這里我們就來看看有代表性的幾種:

1.IniRealm

可能我們并不知道,實(shí)際上這個類在我們第二篇文章中就已經(jīng)用過了。這個類一開始就有如下兩行定義:

public static final String USERS_SECTION_NAME = "users";
public static final String ROLES_SECTION_NAME = "roles";
 

這兩行配置表示 shiro.ini 文件中,[users] 下面的表示表用戶名密碼還有角色,[roles] 下面的則是角色和權(quán)限的對應(yīng)關(guān)系。

2.PropertiesRealm

PropertiesRealm 則規(guī)定了另外一種用戶、角色定義方式,如下:

user.user1=password,role1 role.role1=permission1

3.JdbcRealm

這個顧名思義,就是從數(shù)據(jù)庫中查詢用戶的角色、權(quán)限等信息。打開 JdbcRealm 類,我們看到源碼中有如下幾行:

protected static final String DEFAULT_AUTHENTICATION_QUERY = "select password from users where username = ?";
protected static final String DEFAULT_SALTED_AUTHENTICATION_QUERY = "select password, password_salt from users where username = ?";
protected static final String DEFAULT_USER_ROLES_QUERY = "select role_name from user_roles where username = ?";
protected static final String DEFAULT_PERMISSIONS_QUERY = "select permission from roles_permissions where role_name = ?";
 

根據(jù)這幾行預(yù)設(shè)的 SQL 我們就可以大致推斷出數(shù)據(jù)庫中表的名稱以及字段了,當(dāng)然,我們也可以自定義 SQL。JdbcRealm 實(shí)際上是 AuthenticatingRealm 的子類,關(guān)于 AuthenticatingRealm 我們在后面還會詳細(xì)說到,這里先不展開。接下來我們就來詳細(xì)說說這個 JdbcRealm。

 

JdbcRealm

1.準(zhǔn)備工作

使用 JdbcRealm,涉及到數(shù)據(jù)庫操作,要用到數(shù)據(jù)庫連接池,這里我使用 Druid 數(shù)據(jù)庫連接池,因此首先添加如下依賴:

<dependency>
   <groupId>com.alibaba</groupId>
   <artifactId>druid</artifactId>
   <version>RELEASE</version>
</dependency>
<dependency>
   <groupId>MySQL</groupId>
   <artifactId>mysql-connector-java</artifactId>
   <version>5.1.27</version>
</dependency>
 

2.數(shù)據(jù)庫創(chuàng)建

想要使用 JdbcRealm,那我首先要創(chuàng)建數(shù)據(jù)庫,根據(jù) JdbcRealm 中預(yù)設(shè)的 SQL,我定義的數(shù)據(jù)庫表結(jié)構(gòu)如下:

Shiro中的Realm怎么使用  
p309

這里為了大家能夠直觀的看到表的關(guān)系,我使用了外鍵,實(shí)際工作中,視情況而定。然后向表中添加幾條測試數(shù)據(jù)。數(shù)據(jù)庫腳本小伙伴可以在 github 上下載到(https://github.com/lenve/shiroSamples/blob/v4/shiroDemo.sql)。

3.配置文件處理

然后將 shiro.ini 中的所有配置注釋掉,添加如下注釋:

jdbcRealm=org.apache.shiro.realm.jdbc.JdbcRealm
dataSource=com.alibaba.druid.pool.DruidDataSource
dataSource.driverClassName=com.mysql.jdbc.Driver
dataSource.url=jdbc:mysql://localhost:3306/shiroDemo
dataSource.username=root
dataSource.password=123
jdbcRealm.dataSource=$dataSource
jdbcRealm.permissionsLookupEnabled=true
securityManager.realms=$jdbcRealm
 

這里的配置文件都很簡單,不做過多贅述,小伙伴唯一需要注意的是 permissionsLookupEnabled 需要設(shè)置為 true,否則一會 JdbcRealm 就不會去查詢權(quán)限用戶權(quán)限。

4.測試

OK,做完上面幾步就可以測試了,測試方式和第二篇文章中一樣,我們可以測試下用戶登錄,用戶角色和用戶權(quán)限。

5.自定義查詢 SQL

小伙伴們看懂了上文,對于自定義查詢 SQL 就沒什么問題了。我這里舉一個簡單的例子,比如我要自定義 authenticationQuery 對對應(yīng)的 SQL,查看 JdbcRealm 源碼,我們發(fā)現(xiàn) authenticationQuery 對應(yīng)的 SQL 本來是 select password from users where username = ? ,如果需要修改的話,比如說我的表名不是 users 而是 employee,那么在 shiro.ini 中添加如下配置即可:

jdbcRealm.authenticationQuery=select password from employee where username = ?

到此,關(guān)于“Shiro中的Realm怎么使用”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

分享題目:Shiro中的Realm怎么使用
當(dāng)前網(wǎng)址:http://bm7419.com/article14/ipddde.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、微信公眾號網(wǎng)站營銷、用戶體驗(yàn)、網(wǎng)站導(dǎo)航外貿(mào)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)