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 应用程序中的角色管理的主要内容,如果未能解决你的问题,请参考以下文章

java角色登录管理系统

ASP.NET Web 应用程序中基于 Windows 身份验证的角色管理

java web的用户角色权限管理是如何实现的?

Azure 角色配置管理

java的web应用问题: 请问怎样实现不同的用户对我们做的网站(医务系统)有不同的访问权限呢? 求思路…

从 Azure 中的辅助角色部署 Web 角色