真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

怎么在SpringSecurity中動態(tài)加載用戶角色權(quán)限-創(chuàng)新互聯(lián)

怎么在SpringSecurity中動態(tài)加載用戶角色權(quán)限?相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

創(chuàng)新互聯(lián)公司是一家專業(yè)提供始興企業(yè)網(wǎng)站建設(shè),專注與成都做網(wǎng)站、成都網(wǎng)站設(shè)計、H5頁面制作、小程序制作等業(yè)務(wù)。10年已為始興眾多企業(yè)、政府機構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)絡(luò)公司優(yōu)惠進行中。

一、動態(tài)數(shù)據(jù)登錄驗證的基礎(chǔ)知識

在本號之前的文章中,已經(jīng)介紹了Spring Security的formLogin登錄認證模式,RBAC的權(quán)限控制管理模型,并且針對Spring Security的登錄認證邏輯源碼進行了解析等等。我們所有的用戶、角色、權(quán)限信息都是在配置文件里面寫死的,然而在實際的業(yè)務(wù)系統(tǒng)中,這些信息通常是存放在RBAC權(quán)限模型的數(shù)據(jù)庫表中的。下面我們來回顧一下其中的核心概念:

  • RBAC的權(quán)限模型可以從用戶獲取為用戶分配的一個或多個角色,從用戶的角色又可以獲取該角色的多種權(quán)限。通過關(guān)聯(lián)查詢可以獲取某個用戶的角色信息和權(quán)限信息。

  • 在源碼解析的文章中,我們知道如果我們不希望用戶、角色、權(quán)限信息寫死在配置里面。我們應(yīng)該實現(xiàn)UserDetails與UserDetailsService接口,從而從數(shù)據(jù)庫或者其他的存儲上動態(tài)的加載這些信息。

以上是對一些核心的基礎(chǔ)知識的總結(jié),如果您對這些知識還不是很清晰,建議您先往下讀本文。如果看完本文仍然理解困難,建議您翻看本號之前的文章。

二、UserDetails與UserDetailsService接口

  • UserDetailsService接口有一個方法叫做loadUserByUsername,我們實現(xiàn)動態(tài)加載用戶、角色、權(quán)限信息就是通過實現(xiàn)該方法。函數(shù)見名知義:通過用戶名加載用戶。該方法的返回值就是UserDetails。

  • UserDetails就是用戶信息,即:用戶名、密碼、該用戶所具有的權(quán)限。

下面我們來看一下UserDetails接口都有哪些方法。

public interface UserDetails extends Serializable {
 //獲取用戶的權(quán)限集合
 Collection getAuthorities();
 //獲取密碼
 String getPassword();
 //獲取用戶名
 String getUsername();
 //賬號是否沒過期
 boolean isAccountNonExpired();
 //賬號是否沒被鎖定
 boolean isAccountNonLocked();
 //密碼是否沒過期
 boolean isCredentialsNonExpired();
 //賬戶是否可用
 boolean isEnabled();
}

現(xiàn)在,我們明白了,只要我們把這些信息提供給Spring Security,Spring Security就知道怎么做登錄驗證了,根本不需要我們自己寫Controller實現(xiàn)登錄驗證邏輯。

三、實現(xiàn)UserDetails 接口

public class SysUser implements UserDetails{
 String password(); //密碼
 String username(); //用戶名
 boolean accountNonExpired; //是否沒過期
 boolean accountNonLocked; //是否沒被鎖定
 boolean credentialsNonExpired; //是否沒過期
 boolean enabled; //賬號是否可用
 Collection authorities; //用戶的權(quán)限集合
 //省略構(gòu)造方法
 //省略set方法
 //省略get方法(即接口UserDetails的方法)
}

我們就是寫了一個適應(yīng)于UserDetails的java POJO類,所謂的 UserDetails接口實現(xiàn)就是一些get方法。get方法由Spring Security調(diào)用,我們通過set方法或構(gòu)造函數(shù)為 Spring Security提供UserDetails數(shù)據(jù)。

四、實現(xiàn)UserDetailsService接口

@Component
public class MyUserDetailsService implements UserDetailsService{
 @Override
 public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
  
 //這里從數(shù)據(jù)庫sys_user表里面查詢實體類對象。loadUser方法可使用Mybatis或JDBC或JPA自行實現(xiàn)。
 SysUser sysUser = loadUser(username); 
 // 判斷用戶是否存在 
 if(user == null) { throw new UsernameNotFoundException("用戶名不存在"); }
 //從數(shù)據(jù)庫該用戶所有的角色信息,所有的權(quán)限標志
 //遍歷所有的ROLE角色及所有的Authority權(quán)限(菜單、按鈕)。
 //用逗號分隔他們的唯一標志,具體過程自行實現(xiàn)。
 sysUser.setAuthorities(  AuthorityUtils.commaSeparatedStringToAuthorityList("ROLE_AMIN , system:user:delete")); 
 //sysUser.setAccountNonLocked(true或false);
 return sysUser;
 }
}
  • 通常數(shù)據(jù)庫表sys_user字段要和SysUser屬性一一對應(yīng),比如username、password、enabled。但是比如accountNonLocked字段用于登錄多次錯誤鎖定,但我們一般不會在表里存是否鎖定,而是存一個鎖定時間字段。通過鎖定時間是否大于當前時間判斷賬號是否鎖定,所以實現(xiàn)過程中可以靈活做判斷并用好set方法,不必拘泥于一一對應(yīng)的形式。

  • 角色是一種特殊的權(quán)限,在Spring Security我們可以使用hasRole(角色標識)表達式判斷用戶是否具有某個角色,決定他是否可以做某個操作;通過hasAuthority(權(quán)限標識)表達式判斷是否具有某個操作權(quán)限。

五、最后說明

至此,我們將系統(tǒng)里面的所有的用戶、角色、權(quán)限信息都通過UserDetailsService和UserDetails告知了Spring Security。但是多數(shù)朋友可能仍然不知道該怎樣實現(xiàn)登錄的功能,其實剩下的事情很簡單了:

  • 寫一個登錄界面,寫一個登錄表單,表單使用post方法提交到默認的/login路徑

  • 表單的用戶名、密碼字段名稱默認是username、password。

  • 寫一個登錄成功之后的跳轉(zhuǎn)頁面,比如index.html

看完上述內(nèi)容,你們掌握怎么在SpringSecurity中動態(tài)加載用戶角色權(quán)限的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司行業(yè)資訊頻道,感謝各位的閱讀!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站www.cdcxhl.com,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。


當前題目:怎么在SpringSecurity中動態(tài)加載用戶角色權(quán)限-創(chuàng)新互聯(lián)
網(wǎng)頁路徑:http://weahome.cn/article/doidhd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部