shiro實現許可權管理時遇到的坑

2021-08-15 00:15:40 字數 2420 閱讀 5800

最近在乙個專案中應用到了shiro框架實現許可權管理,也是一邊在網上查資料一邊實現,對shiro的細節的李姐可能不夠深入,所以都在專案中遇到了挺多麻煩。現在說一下我遇到的情況

//1. 把 authenticationtoken 轉換為 usernamepasswordtoken 

usernamepasswordtoken uptoken = (usernamepasswordtoken) token;

//2. 從 usernamepasswordtoken 中來獲取 username

string username = uptoken.getusername();

system.out.println("dogetauthenticationinfo---username:"+username);

//3. 呼叫資料庫的方法, 從資料庫中查詢 username 對應的使用者記錄

system.out.println("2222");

tmanageruser manageruser = sysusermanagerservice.queryuserbyloginname(username);

system.out.println("3333");

system.out.println("dogetauthenticationinfo---manageruser:"+jsonobject.tojson(manageruser));

//4. 若使用者不存在, 則可以丟擲 unknownaccountexception 異常

system.out.println("1111");

if(manageruser==null)else

//6. 根據使用者的情況, 來構建 authenticationinfo 物件並返回. 通常使用的實現類為: ******authenticationinfo

//以下資訊是從資料庫中獲取的.

//1). principal: 認證的實體資訊. 可以是 username, 也可以是資料表對應的使用者的實體類物件.

object principal = username;

//2). credentials: 密碼.

object credentials = manageruser.getuserpassword();

system.out.println("credentials:"+credentials);

//3). realmname: 當前 realm 物件的 name. 呼叫父類的 getname() 方法即可

string realmname = getname();

//4). 鹽值. 將使用者名稱作為鹽

bytesource credentialssalt = bytesource.util.bytes(username);

******authenticationinfo info = null; //new ******authenticationinfo(principal, credentials, realmname);

info = new ******authenticationinfo(principal, credentials, credentialssalt, realmname);

system.out.println("info:"+jsonobject.tojson(info));

return info;

}

上面是我配置的自定義的realm。執行發現能夠進入到自定義的realm,但只能列印出「2222」及以上的部分,queryuserbyloginname方法以下的都無法執行的到,但很奇怪的是後台還不報錯,還可以繼續執行其他相關程式。

在網上查詢了很長時間,發現網上有很多說是service未能正常引入的問題。所以我就在service方法中新增了try-catch**,後來發現他會抓取到空指標異常。如下圖:

接下來就根據這個提示解決問題。該專案是由ssm框架搭建的,所以結合網上的提示,想到是不是因為service沒有在realm之前引入。結果在spring的相關配置檔案引入相關配置還是沒有實現(本人小白,剛工作不久,對spring理解及應用不是很熟悉,希望有大神指點一二)。最後通過乙個很笨的方法實現了,就是替換service的queryuserbyloginname方法。將其改為下面的**實現即可

sqlsession opensession = sqlsessionfactory.opensession();

tmanageruserexample example = new tmanageruserexample();

example.createcriteria().anduserloginnameequalto(username);

如果網友有更好的方式,麻煩指點一

Shiro許可權管理

shiro許可權管理 一.許可權管理的四張核心的表關係 使用者表使用者 角色 關係表 角色表角色 許可權 關係表 許可權表角色 選單 關係表 選單表二.許可權的控制項 粗粒度配置檔案配置 細粒度通過註解實現 三.了解認證和授權的流程 前端發起登入請求 訪問shiro的subject subject....

Shiro許可權管理

1.sql語句許可權表 create table role id int not null auto increment comment id name varchar 20 not null comment 角色名稱 description varchar 200 comment 描述 prima...

基於SHIRO的管理後台許可權認證系統實現(一)

align center size large 基於shiro的管理後台許可權認證系統實現 一 size align 一 專案需求 1.優化原有的管理後台的許可權管理 原角色許可權管理 2.許可權細粒度化 許可權對應具體的某乙個選單 頁面上的按鈕 3.分配靈活 與具體的部門 職位不再關聯 二 專案實...