? ? ? ? JdbcRealm是Shiro提供的另外一種Realm實(shí)現(xiàn),當(dāng)記錄用戶身份申钩、角色次绘、權(quán)限的信息存儲(chǔ)在數(shù)據(jù)庫中就應(yīng)該使用這種實(shí)現(xiàn)。通過它的名字我們也可以看出是通過jdbc的方法是來訪問數(shù)據(jù)庫。
????????使用JdbcRealm作為Realm自然會(huì)涉及到數(shù)據(jù)庫對(duì)象:dataSource钢猛。這里使用Druid連接池伙菜。配置好數(shù)據(jù)庫后,在29行就把它和JdbcRealm關(guān)聯(lián)起來命迈。同時(shí)在第30行開啟權(quán)限查找贩绕,這是必須的,不然第四十行代碼拋出異常表示沒有對(duì)應(yīng)權(quán)限壶愤。
? ? ? ? 但是淑倾,第38-40行的身份驗(yàn)證、角色驗(yàn)證征椒、權(quán)限驗(yàn)證究竟到數(shù)據(jù)庫test的那個(gè)表下找到相關(guān)信息娇哆,從而與37行代碼所示的信息比對(duì)。在上面這個(gè)截圖里看不出任何端倪勃救。
? ? ?? 這是因?yàn)镾hiro事先預(yù)設(shè)了碍讨。以38行的身份驗(yàn)證說明,當(dāng)身份驗(yàn)證時(shí)蒙秒,默認(rèn)執(zhí)行“select password from users where username = ?”,執(zhí)行38行時(shí)勃黍,"?"被“tom”填充。角色驗(yàn)證晕讲、權(quán)限驗(yàn)證同樣如此覆获,就是說test數(shù)據(jù)庫是我實(shí)現(xiàn)已經(jīng)精心設(shè)計(jì)好的,表名瓢省,字段名都是符合Shiro的預(yù)期弄息。
? ? ? ? 如果要自定義各驗(yàn)證的查詢語句,針對(duì)上述的引用對(duì)象realm勤婚,調(diào)用如下方法:
? ? ? ? realm.setAuthenticationQuery(String sql) ?? 該方法設(shè)置身份驗(yàn)證的sql語句摹量。
? ? ? ? realm.setUserRolesQuery(String sql) ?? 該方法設(shè)置角色驗(yàn)證的sql語句。
? ? ? ? realm.setPermissionsQuery(String sql) ?? 該方法設(shè)置權(quán)限驗(yàn)證的sql語句蛔六。