Java 中是否有处理用户权限的标准方法?

Is there any standard way to deal with user privileges in Java?

我有一个 Java 程序涉及多个需要不同权限的用户。我目前有一个带有基本 CRUD 方法的 class;其中每一个都要求当前用户有权调用该方法。例如,用户可能有权调用 "update" 和 "create" 方法,但没有 "delete" 的权限。所有用户都可以调用 "read" 方法。

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

是的,您正在寻找 java.security and javax.security.auth 包。

基本上这个框架为您提供的是 principals(可以验证的实体;用户或组)、credentials 的通用表示(密码、访问密钥、证书)和 权限(也称为权限集或访问控制列表)。

但老实说,这个框架往往会使事情复杂化。 IMO 它提供的唯一有价值的便利是使用 Subject.doAs().

将安全上下文附加到线程

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

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