public
class
userrealm
extends
authorizingrealm
/** * 認證,該方法只在認證的時候執行一次
* @param authenticationtoken
* @return
* @throws authenticationexception
*/@override
protected authenticationinfo dogetauthenticationinfo
(authenticationtoken authenticationtoken)
throws authenticationexception
return null;
}/**
* 授權,注意-->該方法會在每次進行授權操作的時候都執行一次
* 不能每次都去資料庫查一次,解決方法有:
* 1、使用快取,然後用aop切進來,判斷是否有快取
* 2、在認證成功後將許可權傳遞過來
* @param principalcollection
* @return
*/@override
protected authorizationinfo dogetauthorizationinfo
(principalcollection principalcollection)
else
if(null != permissions && permissions.
size()
>0)
}return info;
}
public
class
testmyrealm
catch
(authenticationexception e)
// 授權判斷
boolean role1 = subject.
hasrole
("*:*");
system.out.
println
(name +
" 是否具有 *:* 角色:"
+role1)
;boolean permitted = subject.
ispermitted
("*:*");
system.out.
println
(name +
" 是否具有 *:* 許可權:"
+permitted);}
}
結果
// 學生實體類
public
class
stu// get...set...
}
// 角色、許可權、使用者物件
public
class
activestu
// get...set...
}
public
class
stuserviceimpl
implements
elseif(
"ls"
.equals
(name)
)return stu;
}}
public
class
roleserviceimpl
implements);
}elseif(
"ls"
.equals
(name)))
;}return null;
}}
public
class
permissionserviceimpl
implements);
}elseif(
"ls"
.equals
(name)))
;}return null;
}}
Shiro 自定義Realm實現認證
1.獲取當前的 subject.呼叫 securityutils.getsubject 2.測試當前的使用者是否已經被認證.即是否已經登入.呼叫 subject 的 isauthenticated 3.若沒有被認證,則把使用者名稱和密碼封裝為 usernamepasswordtoken 物件 1 建...
shiro自定義realm認證 五
上一節介紹了realm的作用 realm 需要根據token中的身份資訊去查詢資料庫 入門程式使用ini配置檔案 如果查到使用者返回認證資訊,如果查詢不到返回null。token就相當於是對使用者輸入的使用者名稱和密碼的乙個封裝。下面就是建立乙個使用者名稱密碼token 自定義realm。根據上面穿...
shiro之自定義realm
一 為當限前登入的使用者授予角色和權 protected authorizationinfo dogetauthorizationinfo principalcollection principals 這邊我一直沒找到什麼好的方法 就是在使用者登陸的時候,就要進行這一步的驗證,但是沒有實現,感覺有點...