91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Shiro中的Realm怎么使用

發布時間:2021-12-23 17:17:08 來源:億速云 閱讀:172 作者:iii 欄目:大數據

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

Realm的繼承關系

通過查看類的繼承關系,我們發現 Realm 的子類實際上有很多種,這里我們就來看看有代表性的幾種:

1.IniRealm

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

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

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

2.PropertiesRealm

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

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

3.JdbcRealm

這個顧名思義,就是從數據庫中查詢用戶的角色、權限等信息。打開 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 = ?";
 

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

 

JdbcRealm

1.準備工作

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

<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.數據庫創建

想要使用 JdbcRealm,那我首先要創建數據庫,根據 JdbcRealm 中預設的 SQL,我定義的數據庫表結構如下:

Shiro中的Realm怎么使用  
p309

這里為了大家能夠直觀的看到表的關系,我使用了外鍵,實際工作中,視情況而定。然后向表中添加幾條測試數據。數據庫腳本小伙伴可以在 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 需要設置為 true,否則一會 JdbcRealm 就不會去查詢權限用戶權限。

4.測試

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

5.自定義查詢 SQL

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

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

到此,關于“Shiro中的Realm怎么使用”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

全州县| 两当县| 赫章县| 木里| 遂平县| 蓝山县| 时尚| 衡阳市| 达尔| 丹阳市| 贵德县| 高唐县| 武山县| 苏尼特右旗| 中方县| 北海市| 彭州市| 舟曲县| 扶风县| 凤翔县| 自贡市| 丰城市| 华安县| 沂水县| 桐城市| 南京市| 怀仁县| 平安县| 尤溪县| 乌拉特后旗| 文水县| 长顺县| 介休市| 宜州市| 融水| 巴东县| 武乡县| 天门市| 吴桥县| 泌阳县| 古丈县|