Java Web 应用程序中的角色管理
Posted
技术标签:
【中文标题】Java Web 应用程序中的角色管理【英文标题】:Role Management in Java Web Application 【发布时间】:2017-11-19 06:18:06 【问题描述】:我想在基于 Java Web 的应用程序中设计角色管理,即管理员可以访问所有资源,操作员只能访问少数资源,仅查看用户不能访问任何资源。
如果我在 User 表中保留 Role 列,因为 Admin 可以执行所有操作,因此对于 Operator 可以执行的所有操作,我必须保持 Admin 检查。如下所示
if (role == Operator or **role== Admin**)
do this....
否则,它将阻止管理员进行该操作。
另外,如果将来角色类型增加,它会造成很多分散。
考虑到未来的增强,最好的设计方法是什么?
附:我不想使用 Spring Security 这样的框架。
【问题讨论】:
Web 应用程序通常是在通过容器提供服务的框架内开发的,例如。雄猫。你在用一个吗?在这种情况下,身份验证和授权通常通过服务来实现。例如,Java EE 提供了一种简单形式的声明式基于角色的授权。 我正在使用带有嵌入式 Undertow 服务器的 Spring Boot 【参考方案1】:我会在User
实体类中添加一个checkRole(role)
方法,用于检查用户是否具有指定的角色。它可以返回一个boolean
,或者如果用户没有该角色,则抛出一个专门的异常。
编辑
要添加范围功能,请尝试以下操作:
// Create role constants:
public final int ADMIN = 2;
public final int OPERATOR = 1;
public final int VIEW_ONLY = 0;
// Then implement the checkRole method:
public void checkRole(int role)
if (this.role < role)
throw new MyAuthException("Insufficient rights");
// And in your action methods you can check for rights like this:
public .... Action(....) throws MyAuthException
loggedInUser.checkRole(OPERATOR);
// Do whatever this action should do...
【讨论】:
没用。假设 /createUser 可以由 Admin 和 Operator 完成,但不能由 View Only 完成。在这种情况下,我的代码将是 (role == Operator or role== Admin) create User Allow else Not allowed.. 如果您将这些角色映射为有序值,例如int
,您可以进行“大于”检查,而不仅仅是“等于”检查...
是的,这很有用。能否请您详细说明一下。
谢谢你的帮助。我应该如何在数据库的用户表中保存角色。即一个整数或角色名称字符串,它将在单独的表或其他东西中与整数进一步映射?
在数据库中我会使用一个整数列。以上是关于Java Web 应用程序中的角色管理的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET Web 应用程序中基于 Windows 身份验证的角色管理