有没有标准的方法来处理 Java 中的用户权限?

Posted

技术标签:

【中文标题】有没有标准的方法来处理 Java 中的用户权限?【英文标题】:Is there any standard way to deal with user privileges in Java? 【发布时间】:2015-03-26 20:34:39 【问题描述】:

我有一个 Java 程序,涉及需要拥有不同权限的多个用户。我目前有一个带有基本 CRUD 方法的课程;每个都要求当前用户有权调用该方法。例如,用户可能有权调用“update”和“create”方法,但不能调用“delete”。所有用户都可以调用“读取”方法。

我想给每个用户一些使用方法的任意组合权限,所以我认为每个方法都应该检查用户的权限。但是,最好的方法是什么?每次调用时是否应将用户对象作为参数传递给方法,还是有更好的方法? 我查看了 Java 中的 SecurityManager 类,但它似乎是针对小程序和文件系统权限的(这两个都不适用于我的情况)。这是正确的,还是我在这里遗漏了什么?

【问题讨论】:

听起来你想使用Acl 和JAAS。可能与LDAP 或Kerberos 集成。简而言之,是的...... Java 有支持你想要的机制。不,SecurityManager 不是其中之一。 结帐jaasbook.com 这是一本我不久前读过的免费书。不知道它是否过时了 您可能需要 Spring Security 或 Apache Shiro。 【参考方案1】:

是的,您正在寻找 java.securityjavax.security.auth 软件包。

这个框架给你的基本上是principals(可以被认证的实体;用户或组)、凭证(密码、访问密钥、证书)的通用表示和权限(又名权限集或访问控制列表)。

但老实说,这个框架往往会使事情复杂化。 IMO 它提供的唯一有价值的便利是使用 Subject.doAs() 将安全上下文附加到线程。

身份验证的基本要点是确保某人是他们声称的身份,而授权的基本要点是让某人只做他们被允许的事情。

如果您已经拥有自己的用户、密码和权限表示,我建议您保持简单。您需要做的就是将用户的 ID 和权限作为单个对象存储在其会话属性中,并使此信息可用于您的应用程序的业务逻辑以检查权限(通过作为参数传递)。它简单、明确、可高度测试。

【讨论】:

以上是关于有没有标准的方法来处理 Java 中的用户权限?的主要内容,如果未能解决你的问题,请参考以下文章

Spring Security 中的权限注解很神奇吗?

有没有以标准用户身份运行应用程序的方法?

如何设置Windows7标准用户的权限?

华为云 您没有关系数据库服务(rds)访问权限 这个该怎么处理?

播放框架用java中的actor处理websockets

用Java复制文件的标准简洁方法?