網頁

2018/3/13

Spring Security 什麼是Principal

Spring Security中常看到Principal這個字。Principle是指一個存取系統資源的實體(Entity),簡單來說就是登入的使用者。

但Principle與User的差異是,Principal是指一個可辨識的唯一身分,用來代表一個人,一個公司,一個裝置或另一個系統,並不限定於代表一個人;而使用者(User)是指與系統互動的操作者(人)。

引述java.security.Principal的說明:

This interface represents the abstract notion of a principal, which can be used to represent any entity, such as an individual, a corporation, and a login id.


在安全驗證的概念中,使用系統資源對象的概念可分為Subject,Principal及User,可參考這篇


而Spring Security中的principal是來自Authentication.getPrincipal(),回傳值為被驗證或已被驗證的主體。在一個帶有使用者名稱(username)及密碼(password)的驗證請求(authentication request)中,principal即為username。

在Spring Security中principal存放在SecurityContextAuthentication,可透過以下取得。

Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
if (principal instanceof UserDetails) {
    String username = ((UserDetails)principal).getUsername();
} else {
    String username = principal.toString();
}

Authentication.getPrincipal()取得的principal為Object型別物件,而Spring Security通常用UserDetails來封裝principle資訊。


參考:

沒有留言:

張貼留言