JBoss 4 內建 JAAS(Java Authentication and Authorization Service)支援,搭配 EJB 3 的註解式宣告,能快速完成「誰能存取」與「能做什麼」的安全控管。本文拆解認證與授權兩大面向,並給出關鍵程式碼片段。
@SecurityDomain("other")
public class CalculatorBean implements Calculator { ... }
對應 users.properties 存放帳密:
kabir=validpassword
import org.jboss.security.SecurityAssociation;
import org.jboss.security.SimplePrincipal;
// 設定主體
SecurityAssociation.setPrincipal(new SimplePrincipal("kabir"));
// 設定憑證(錯誤密碼示範)
SecurityAssociation.setCredential("invalidpassword".toCharArray());
驗證失敗會拋出例外,攔截處理即可回傳 401/403。
@MethodPermissions({"teacher"})
public int divide(int x, int y) {
return x / y;
}
roles.properties 定義使用者角色:
kabir=student
呼叫 divide() 時,容器比對 requiredRoles=[teacher] 與 principalRoles=[student],不符則拋出:
Insufficient method permissions, principal=kabir, requiredRoles=[teacher], principalRoles=[student]
LoginModule,避免屬性檔維護困難。jboss.xml 定義 role-mapping 實現角色分組。@RolesAllowed、@PermitAll、@DenyAll 標準註解,提升可移植性。