您好,登錄后才能下訂單哦!
這篇文章主要介紹“Shiro中的Realm怎么使用”,在日常操作中,相信很多人在Shiro中的Realm怎么使用問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Shiro中的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。
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,我定義的數據庫表結構如下:
這里為了大家能夠直觀的看到表的關系,我使用了外鍵,實際工作中,視情況而定。然后向表中添加幾條測試數據。數據庫腳本小伙伴可以在 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怎么使用”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。