Shiro 學習記錄(二) 簡單的 認證

2021-09-05 01:27:50 字數 4705 閱讀 5344

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...