shiro自定义Realm
生活随笔
收集整理的這篇文章主要介紹了
shiro自定义Realm
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.1?自定義Realm
上邊的程序使用的是shiro自帶的IniRealm,IniRealm從ini配置文件中讀取用戶的信息,大部分情況下需要從系統的數據庫中讀取用戶信息,所以需要自定義realm。分享牛系列,分享牛專欄,分享牛。
1.1.1?shiro提供的realm
?
?
最基礎的是Realm接口,CachingRealm負責緩存處理,AuthenticationRealm負責認證,AuthorizingRealm負責授權,通常自定義的realm繼承AuthorizingRealm。
1.1.2?自定義Realm
public class CustomRealm1 extends AuthorizingRealm {@Overridepublic String getName() {return "customRealm1";}//支持UsernamePasswordToken@Overridepublic boolean supports(AuthenticationToken token) {return token instanceof UsernamePasswordToken;}//認證@Overrideprotected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {//從token中 獲取用戶身份信息String username = (String) token.getPrincipal();//拿username從數據庫中查詢//....//如果查詢不到則返回nullif(!username.equals("zhang")){//這里模擬查詢不到return null;}//獲取從數據庫查詢出來的用戶密碼 String password = "123";//這里使用靜態數據模擬。。//返回認證信息由父類AuthenticatingRealm進行認證SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo(username, password, getName());return simpleAuthenticationInfo;}} // 授權@Overrideprotected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {// 獲取身份信息String username = (String) principals.getPrimaryPrincipal();// 根據身份信息從數據庫中查詢權限數據//....這里使用靜態數據模擬List<String> permissions = new ArrayList<String>();permissions.add("user:create");permissions.add("user.delete");//將權限信息封閉為AuthorizationInfoSimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();for(String permission:permissions){simpleAuthorizationInfo.addStringPermission(permission);}return simpleAuthorizationInfo;}1.1.3?shiro-realm.ini
[main]
#自定義 realm
customRealm=cn.shareniu.shiro.authentication.realm.CustomRealm1
#將realm設置到securityManager
securityManager.realms=$customRealm
?
思考:這里為什么不用配置[users]了??
shiro-permission.ini中的[roles]為什么不需要了??
1.1.4?測試代碼
測試代碼同入門程序,將ini的地址修改為shiro-realm.ini。
分別模擬賬號不存在、密碼錯誤、賬號和密碼正確進行測試。
?分享牛原創(尊重原創 轉載對的時候第一行請注明,轉載出處來自分享牛http://blog.csdn.net/qq_30739519) java架構師交流群 523988350
總結
以上是生活随笔為你收集整理的shiro自定义Realm的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ThreadLocal_OSIV模式_F
- 下一篇: Java数据持久层框架 MyBatis之