在前幾天,我們介紹了 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 層級與方法層級的設定,並示範常見的實作模式。
因為是新的概念,今天用比較斷點,一步一步的方式讓大家理解,那麼今天就分享到這裡,我們明天見囉!