Java面試指北!13個認證授權常見面試題/知識點總結!| JavaGuide

大傢好,我是 Guide哥!端午已過,又要開始工作學習啦!

我發現有很多小夥伴對認證授權方面的知識不是特別瞭解,搞不清 Session 認證、JWT 以及 Cookie 這些概念。

所以,根據我根據日常對這部分學習已經在項目中的實際運用總結瞭這 13 個相關的問題並且附上瞭詳細的回答。希望能夠對大傢有幫助!

認證 (Authentication) 和授權 (Authorization)的區別是什麼?

這是一個絕大多數人都會混淆的問題。首先先從讀音上來認識這兩個名詞,很多人都會把它倆的讀音搞混,所以我建議你先先去查一查這兩個單詞到底該怎麼讀,他們的具體含義是什麼。

說簡單點就是:

  • 認證 (Authentication): 你是誰。
  • 授權 (Authorization): 你有權限幹什麼。

稍微正式點(囉嗦點)的說法就是 :

  • Authentication(認證) 是驗證您的身份的憑據(例如用戶名/用戶 ID 和密碼),通過這個憑據,系統得以知道你就是你,也就是說系統存在你這個用戶。所以,Authentication 被稱為身份/用戶驗證。
  • Authorization(授權) 發生在 Authentication(認證) 之後。授權嘛,光看意思大傢應該就明白,它主要掌管我們訪問系統的權限。比如有些特定資源隻能具有特定權限的人才能訪問比如 admin,有些對系統資源操作比如刪除、添加、更新隻能特定人才具有。

認證 :

授權:

這兩個一般在我們的系統中被結合在一起使用,目的就是為瞭保護我們系統的安全性。

RBAC 模型瞭解嗎?

系統權限控制最常采用的訪問控制模型就是 RBAC 模型 。

什麼是 RBAC 呢?

RBAC 即基於角色的權限訪問控制(Role-Based Access Control)。這是一種通過角色關聯權限,角色同時又關聯用戶的授權的方式。

簡單地說:一個用戶可以擁有若幹角色,每一個角色有可以被分配若幹權限這樣,就構造成“用戶-角色-權限” 的授權模型。在這種模型中,用戶與角色、角色與權限之間構成瞭多對多的關系,如下圖

在 RBAC 中,權限與角色相關聯,用戶通過成為適當角色的成員而得到這些角色的權限。這就極大地簡化瞭權限的管理。

通常 RBAC 下的權限設計相關的表有5 張,其中有 2 張用於建立表之間的聯系:

通過這個權限模型,我們可以創建不同的角色並為不同的角色分配不同的權限范圍(菜單)。

通常來說,如果系統對於權限控制要求比較嚴格的話,一般都會選擇使用 RBAC 模型來做權限控制。

什麼是 Cookie ? Cookie 的作用是什麼?

CookieSession 都是用來跟蹤瀏覽器用戶身份的會話方式,但是兩者的應用場景不太一樣。

維基百科是這樣定義 Cookie 的:

簡單來說: Cookie 存放在客戶端,一般用來保存用戶信息。

下面是 Cookie 的一些應用案例:

  1. 我們在 Cookie 中保存已經登錄過的用戶信息,下次訪問網站的時候頁面可以自動幫你登錄的一些基本信息給填瞭。除此之外,Cookie 還能保存用戶首選項,主題和其他設置信息。
  2. 使用 Cookie 保存 Session 或者 Token ,向後端發送請求的時候帶上 Cookie,這樣後端就能取到 Session 或者 Token 瞭。這樣就能記錄用戶當前的狀態瞭,因為 HTTP 協議是無狀態的。
  3. Cookie 還可以用來記錄和分析用戶行為。舉個簡單的例子你在網上購物的時候,因為 HTTP 協議是沒有狀態的,如果服務器想要獲取你在某個頁面的停留狀態或者看瞭哪些商品,一種常用的實現方式就是將這些信息存放在 Cookie
  4. ……

如何在項目中使用 Cookie 呢?

我這裡以 Spring Boot 項目為例。

1)設置 Cookie 返回給客戶端

@GetMapping("/change-username")
public String setCookie(HttpServletResponse response) {
// 創建一個 cookie
Cookie cookie = new Cookie("username", "Jovan");
//設置 cookie過期時間
cookie.setMaxAge(7 * 24 * 60 * 60); // expires in 7 days
//添加到 response 中
response.addCookie(cookie);

return "Username is changed!";
}

赞(0)