在前幾天,我們介紹了 Authentication(認證),重點在於「確認使用者是誰」。
接下來,我們要進入 Authorization(授權) 的領域,這是 Spring Security 的另一個核心功能。
如果說 Authentication 是「刷卡進大樓大門」,那麼 Authorization 就是「你能不能搭電梯到 20 樓?能不能進入會議室?」。
Authorization 代表 系統判斷某個已認證使用者是否擁有執行特定操作的權限。
常見的檢查條件包含:
ROLE_ADMIN、ROLE_USER。READ_REPORT、WRITE_REPORT。Spring Security 的授權判斷通常有三個層級:
HttpSecurity 的設定中,透過 .requestMatchers() + .hasRole() 或 .hasAuthority() 來限制 API 訪問。/admin/** 僅限 ADMIN 使用。@PreAuthorize("hasRole('ADMIN')")
@PostAuthorize("returnObject.owner == authentication.name")
在 Spring Security 中,常會看到 ROLE_USER 與 hasAuthority("READ_PRIVILEGE") 的用法,兩者有些細微差別:
| 層級 | 說明 |
|---|---|
| Role | 通常用於群組分類,例如 ROLE_ADMIN、ROLE_MANAGER。 |
| Authority | 用於更細的權限操作,例如 READ_USER、DELETE_ORDER。 |
實務上:
Spring Security 在判斷 Authorization 時,大致上會經歷以下流程:
假設一個銀行系統有以下角色與需求:
在 Spring Security 中可能會有以下配置:
/account/** → hasRole("CUSTOMER") or hasRole("STAFF")
/admin/** → hasRole("ADMIN")
@PreAuthorize("#account.owner == authentication.name") → 確保客戶只能看自己的帳戶Authorization 的核心是 確保「正確的人」只能做「正確的事」。
它不僅僅是技術實作,更牽涉到系統安全策略的設計。
在接下來的章節,我們會深入探討 Spring Security 如何在程式碼中整合授權,包含 URL 層級與方法層級的設定,並示範常見的實作模式。
因為是新的概念,今天用比較斷點,一步一步的方式讓大家理解,那麼今天就分享到這裡,我們明天見囉!