shiro 簡單的認證
需要匯入的依賴
org.apache.shiro
shiro-core
1.3.2
commons-logging
commons-logging
1.1
1,基本的認證(用配置檔案模擬資料庫獲取 使用者資訊)1.1,建立安全管理器
//建立安全管理器
inisecuritymanage***ctory inisecuritymanage***ctory = new inisecuritymanage***ctory("classpath:shiro/shirotest1.ini");
securitymanager securitymanager = inisecuritymanage***ctory.getinstance();
new inisecuritymanage***ctory("classpath:shiro/shirotest1.ini"); .ini是shiro的配置檔案型別,裡面的是使用者的資訊
shirotest1.ini 配置檔案內容
[users]
lisi=123456
zhangsan=123456
1.2,告訴安全工具類,使用哪乙個安全管理器
securityutils.setsecuritymanager(securitymanager);
1.3,獲取主體
subject subject = securityutils.getsubject();
1.4,認證主體攜帶資料
authenticationtoken token = new usernamepasswordtoken("zhangsan", "123456");
1.5,認證狀態
//boolean 型別 true 認證成功 false認證失敗
boolean flag = subject.isauthenticated();
1.6,簡單的測試**
public class testshiro1 catch (unknownaccountexception e) catch (incorrectcredential***ception e)
flag = subject.isauthenticated();
system.out.println("認證狀態: "+flag);
}}
2,從資料庫獲取,使用者資訊認證2.1,需要自定義realm,建立類並繼承authenticatingrealm,複寫dogetauthenticationinfo方法
public class myrealm extends authenticatingrealm
}
2.2,獲取使用者名稱
string principal = (string)authentiontoken.getprincipal();
2.3,呼叫 dao層獲取使用者資訊進行對比賬號和密碼,我這裡沒有呼叫dao層 直接模擬的,this.getname 是用來realm的唯一名稱
//呼叫dao 根據使用者名稱 查詢使用者物件
//這個應該直接從資料庫呼叫 然後在進行 new ******authenticationinfo("zhangsan","123456",this.getname());
//然後進行比對
if(principal.equals("zhangsan"))
2.4,自定義myrealm的簡單**
/**
* 用來呼叫dao層 查詢 使用者資料然後進行認證
* @author wangmx
*/public class myrealm extends authenticatingrealm
return null;
}}
2.5,shiro.ini配置檔案的配置 主要 的作用是讓他走自定義的安全管理器(realm)
#自定義realm的配置 不讓他走 自己內部的realm 走我自定意的realm
[main]
myrealm=com.wangmx.shirotest.myrealm
#讓安全管理器 走自定義的realm
securitymanager.realms=$myrealm
2.6,認證的** 只需要替換 new inisecuritymanage***ctory("classpath:shiro/shiro.ini"); 的配置檔案,其他不變
inisecuritymanage***ctory inisecuritymanage***ctory = new inisecuritymanage***ctory("classpath:shiro/shiro.ini");
securitymanager securitymanager = inisecuritymanage***ctory.getinstance();
3,md5認證3.1,shiro有自己的md5的方法 new md5hash("123456","abcd",1024); ,new md5hash("123456","abcd");,new md5hash("123456","abcd"); 第乙個 是 加鹽加雜湊,第二個是加鹽,第三個什麼都不加
//原始資料 鹽值 雜湊
md5hash md5hash = new md5hash("123456","abcd",1024);
string s = md5hash.tohex();
3.2,md5realm 繼承 authenticatingrealm 並且複寫 dogetauthenticationinfo 方法和基本的基本上差不多 只是 new ******authenticationinfo() 引數有所不同
public class md5realm extends authenticatingrealm
}
返回的寫法,bytesource.util.bytes("abcd") 是加鹽
new ******authenticationinfo(username,password,bytesource.util.bytes("abcd"),this.getname());
自定義realm的全部**
public class md5realm extends authenticatingrealm
return null; }
}
3.3,shiro_md5.ini 的配置 基本上是告訴shiro 加密的型別和雜湊的次數,和修改憑證匹配器
[main]
#宣告憑證匹配器
hashedcredentialsmatcher=org.apache.shiro.authc.credential.hashedcredentialsmatcher
hashedcredentialsmatcher.hashalgorithmname=md5
hashedcredentialsmatcher.ha****erations=1024
#宣告realm
myrealm=com.wangmx.shiromd5test.md5realm
#告知realm使用宣告的憑證匹配器
myrealm.credentialsmatcher=$hashedcredentialsmatcher
#讓安全管理器 走自定義的realm
securitymanager.realms=$myrealm
3.4,認證的**和基本認證一樣就是替換shiro_md5.ini,new inisecuritymanage***ctory("classpath:shiro/shiro_md5.ini");
inisecuritymanage***ctory inisecuritymanage***ctory = new inisecuritymanage***ctory("classpath:shiro/shiro_md5.ini");
securitymanager securitymanager = inisecuritymanage***ctory.getinstance();
簡單的測試** 可充當controller
public class testshiroauthen1 catch (unknownaccountexception e) catch (incorrectcredential***ception e)
system.out.println("認證狀態:"+subject.isauthenticated());}}
Shiro認證和授權學習記錄
subject 使用者主體 操作扔給securitymanager securitymanager 安全管理器 關聯realm realm shiro和資料庫打交道的 org.apache.shirogroupid shiro springartifactid 1.4.0version depend...
shiro學習 二 入門認證
使用 test 完成最基本簡單的認證流程。1 建立 securitymanager 2 主體 subject 提交請求 3 securitymanager 認證 4 authenticator 認證 5 realm 驗證 org.apache.shiro shiro core 1.6.0 junit...
Shiro介紹(二) 從簡單的認證開始
繼續,先來看看登入功能能簡化到什麼程度 modelandview mv new modelandview trycatch exception ex return mv 但是,沒完,真得這麼簡單嗎?一一道來。org.apache.shirogroupid shiro coreartifactid 1...