| 維度 | Apache Shiro | Spring Security |
|---|---|---|
| 框架綁定 | 框架無關,可用於 Java SE、Spring、Spring Boot、非 Spring 環境 | 強綁定 Spring 生態,需 Spring 容器管理 Bean |
| 架構哲學 | 「簡單即強大」,核心三大件:Subject、SecurityManager、Realm | 「功能全面」,基於 Filter 鏈、AuthenticationManager、AccessDecisionManager |
| 學習曲線 | 平緩,配置簡單(ini/注解/配置類) | 陡峭,概念多(Principal、GrantedAuthority、Authentication、FilterInvocation…) |
| 功能豐富度 | 核心認證授權,需自行擴展 OAuth2、OpenID、ACL 等 | 開箱即用:OAuth2、SAML、LDAP、ACL、CSRF、Session 管理、方法級安全 |
| 性能/體積 | 輕量(~200KB core jar) | 較重(核心模組 1MB+,引入 Spring 全家桶) |
| 社區/生態 | 成熟穩定,文檔清晰,近年更新較慢 | Spring 官方主推,版本迭代快,資源極豐富 |
@RequiresRoles("admin")
@RequiresPermissions("user:delete")
public void deleteUser(Long id) { ... }
@PreAuthorize("hasRole('ADMIN') and hasAuthority('user:delete')")
public void deleteUser(Long id) { ... }
兩者無法直接互換,遷移需重寫:Realm → UserDetailsService/AuthenticationProvider、Shiro Filter → SecurityFilterChain、權限表達式語法轉換。建議新項目按技術棲定型,老項目勿輕易遷移。
Shiro =「輕量、通用、易上手」;Spring Security =「重型、Spring 原生、功能全」。沒有絕對優劣,只有適不適合你的技術棲與業務複雜度。