![]()
Apache Shiro 係一個好勁又易用嘅 Java 安全框架,用嚟做身份驗證、授權、加密同會話管理。
佢適用喺由細型流動 app 到大型 Web 同企業 app 嘅任何應用程式,透過直觀嘅 API 快快哋保護應用。
主要特點:
– 支援身份驗證(登入)、授權(訪問控制)、加密同會話管理。
– 提供可插拔數據源(例如 LDAP、JDBC、Active Directory),並內建快取支援嚟提升性能。
– 支援單點登入(SSO)、Remember Me 功能,同埋跨異構客戶端嘅會話共享。
– 加密功能封裝咗 JDK 複雜 API,提供簡潔嘅密碼同哈希處理,支援鹽值同多次哈希。
架構:
– Subject:代表當前用戶,作為同框架互動嘅入口。
– SecurityManager:核心安全管理器,協調身份驗證、授權等模組。
– Realm:連接安全數據源嘅橋樑,用嚟攞用戶、角色同權限資訊,可以自定義或者用內建嘅(例如 JdbcRealm、IniRealm)。
範例:
喺 Spring 應用入面整合 Shiro:
– 配置 `DelegatingFilterProxy` 過濾器喺 `web.xml`,並喺 Spring XML 入面定義 `shiroFilter` bean,設定安全管理器、登入 URL 同資源攔截規則(例如 `/user/login = anon`, `/** = authc`)。
– 自定義 `UserRealm` 繼承 `AuthorizingRealm`,實作 `doGetAuthenticationInfo` 驗證用戶密碼,同 `doGetAuthorizationInfo` 返回角色同權限。
– 用註解例如 `@RequiresPermissions(“角色列表”)` 控制方法訪問,或者 JSP 標籤 `
– 登入時用 `SecurityUtils.getSubject().login(token)` 嚟做身份驗證,失敗時捕獲異常例如 `UnknownAccountException` 或者 `IncorrectCredentialsException`。閱讀原文