【发布时间】:2011-04-06 00:05:47
【问题描述】:
我使用了带有 Glassfish v3.0.1 的 Java EE 6,我想知道 Java EE 安全模型是否支持 ACL,如果支持,它的粒度有多细?
已编辑
我通过 glassfish v3 使用 jdbc 领域实现安全性,该领域在运行时通过查看 password 字段和授权通过查看 role 字段来查看数据库中的表 USER 以检查身份验证。角色字段仅包含 2 个 ADMINISTRATOR 或 DESIGNER。所以它是用户和角色之间的一对一映射。在托管 bean 级别,我实现了这个
private Principal getLoggedInUser()
{
HttpServletRequest request =
(HttpServletRequest) FacesContext.getCurrentInstance().
getExternalContext().getRequest();
if(request.isUserInRole("ADMINISTRATORS")){
admin = true;
}else{
admin = false;
}
return request.getUserPrincipal();
}
public boolean isUserNotLogin()
{
Principal loginUser = getLoggedInUser();
if (loginUser == null)
{
return true;
}
return false;
}
public String getLoginUserName()
{
Principal loginUser = getLoggedInUser();
if (loginUser != null)
{
return loginUser.getName();
}
return "None";
}
通过调用isUserInRole,我可以确定用户是否为admin,然后JSF将适当地render内容。但是,这还不够细粒度(真正的快速背景信息:有多个项目,一个项目包含多个图纸)。因为如果你是DESIGNER,你可以看到所有项目的所有图纸(如果我只希望tom 处理项目A,而peter 将处理项目B,@987654334 @可以监督A和B这两个项目。我希望在运行时,当我创建用户时,我可以专门设置他/她可以看到什么项目。有没有办法做到这一点? 注意:不止两个项目,以上示例仅用于演示。
【问题讨论】:
标签: java security jakarta-ee glassfish acl