有關Shiro中Principal的使用

2021-08-11 01:44:30 字數 2418 閱讀 7560

1、定義

解釋:

1)可以是uuid

2)資料庫中的主鍵

3)ldap uuid或靜態dn

4)在所有使用者帳戶中唯一的字串使用者名稱。

也就是說這個值必須是唯一的。也可以是郵箱、身份證等值。

1、用法

進入其構造方法

public

******authenticationinfo(object principal, object credentials, string realmname)

發現principal是為object型別的,也就是說它可以接受所有的物件,

this.principals = new ******principalcollection(principal, realmname);
是把principal新增到對應的集合中。新增的過程首先判斷是否為collection型別如果是就以新增集合的方式新增,如果不是就新增單個物件。

2、使用標籤取出

處理標籤的類主要是principaltag進去我們住要看ondostarttag()

public

intondostarttag() throws jspexception else

// get the string value of the principal

if (principal != null) else }}

// print out the principal value if not null

if (strvalue != null) catch (ioexception e)

}return skip_body;

}

1)先判斷subject是否為空,如果為空直接丟擲異常

throw

new jsptagexception("error writing [" + strvalue + "] to jsp.", e);

2)如果不為空判斷type屬性是否為空,如果為空那麼以迭代的方式得到當前principal集合的第乙個值

principal =getsubject().getprincipal();
進入內部

public object getprincipal()
繼續跟進

private object getprimaryprincipal(principalcollection principals) 

return

null;

}

再繼續

public object getprimaryprincipal() 

return iterator().next();

}

3)如果不為空得到指定型別的principal 這裡久不繼續跟進方法了。

principal =getprincipalfromclassname();
4)接下來判讀屬性是否為空,如果為空,返回principal的tostring()

strvalue =principal.tostring();
5)如果不為空,先把principal轉化為指定的物件,然後再根據屬性來取值

strvalue =getprincipalproperty(principal, property);
3、使用例子

listlist = new arraylist<>();

list.add(admin.getname());

list.add(admin.getid());

list.add(admin.getemail());

list.add(admin.getpsd());

return new ******authenticationinfo(list, admin.getpsd(), this.getclass().getname());

class="hidden-xs">

span>

這樣就能拿到使用者名稱。

shiro中unauthorizedUrl不起作用

解決方法 在shiro配置檔案中新增 異常全路徑做key,錯誤頁面做value bean class property name props prop key org.apache.shiro.authz.unauthorizedexception 403 prop props property b...

shiro中密碼匹配

參考文章 shiro通過在配置檔案彙總進行如下配置進行密碼匹配 指定hash演算法為md5 指定雜湊次數為2次 指定hash雜湊值使用hex加密儲存。value false 表明hash雜湊值用用base64 encoded儲存。需要注意 資料庫密碼儲存時使用的加密方式要和配置檔案中配置的方式相一致...

shiro中rememberMe的使用

1.根據系統安全首先將用到的activeuser和syspermission這兩個類進行系列化介面 2.在安全管理氣的屬性中配置rememberme,並設定失效時間,3.在頁面中新增rememberme這個選項 4.在自定義的form認證過濾器中的bean屬性中新增rememberme 使用者登陸選...