在每個業務方法前插入權限檢查,或為每個業務類別建立代理類別。缺點明顯:業務邏輯與權限邏輯強耦合、擴充修改困難;代理類別雖解耦但從角色維度看涉及類別過多,維護成本高。
EJB 規範定義聲明式安全,由容器負責權限驗證,應用僅需配置部署描述檔。雖簡化應用設計,但靈活度受限於容器實作,移植性存疑。
AOP 引入後,權限控制演進為兩大方向:
private static aspect PermissionCheckAspect {
private pointcut permissionCheckedExecution() :
execution(public Forum ForumFactory.createForum(String, String));
before() : permissionCheckedExecution() {
if (!permissions.get(ForumPermissions.SYSTEM_ADMIN)) {
throw new UnauthorizedException();
}
}
}
切面邏輯:在 createForum 執行前檢查權限,無權則拋出異常。業務類別完全無感知。
若多個方法需同權限,可用 || 串聯,或以通配符簡化:
private pointcut permissionCheckedExecution() :
execution(public * ForumFactory.*(..));
一行涵蓋 ForumFactory 所有公有方法,極大降低維護成本。
原始 Jive 程式碼將權限與使用者硬編碼。引入「角色」概念,建立 User-Role-Permission 三層模型,配合切面動態解析權限,可將業務邏輯與安全策略徹底解耦,實現真正的聲明式安全。
AOP 使權限控制從「程式碼散落」轉為「集中聲明」,是企業級應用安全架構演進的關鍵里程碑。