English 中文(简体)
如何在Java应用程序中实现管理员权限?
原标题:How to implement Administrator rights in Java Application?

我正在开发一个用Java实现的数据建模软件。该应用程序将文本数据(存储在数据库中)转换为图形形式,以便用户以更有效的形式解释数据。现在,这个应用程序将被3类人访问:

1. 管理员(能够填充数据库的数据,并在将数据输入数据库后查看其视觉表达形式)

2. 观众(只能查看经理填写的可视数据形式)

3. 管理员(可以创建和管理其他管理员、经理和查看者)

现在,如何实现同一应用的三个不同视图。

注意:经理、观众和管理员可以在世界任何地方,通过互联网访问应用程序。

在我看来有一种想法如下:

步骤1:将所有业务逻辑编写在EJB中,以便在分布式环境中使用(即可以通过互联网由多个用户访问)。

步骤2:编写3个Swing GUI客户端:一个用于管理员,一个用于经理,一个用于查看者。这3个GUI客户端可以访问使用EJB编写的业务逻辑。

步骤3: 为客户分配相应的用户。例如,将经理客户分配给经理。

问题

Q1. 上述方法是否正确?

Q2。 这是许多软件常见的功能,那么它们是通过这种方式实现此类功能还是通过其他方式?

Q3. 如果有任何更好的方法,那么是什么方法呢?

最佳回答
  1. no
  2. no
  3. yes

为不同的安全角色创建不同的客户端是:

  • security hole - what if a viewer obtains the administrator version?
  • hard to maintain

做这个的方法是:

  • make the data transferred to the client dependent on a security check
  • also make various parts of the UI visible/enabled depending on that security check
  • the security check is made on the server
  • the security check depends on the currently logged user
  • the user logs in on startup, using his credentials (username/password or digital certificate)
  • the security roles (administrator, moderator, viewer) are stored on the server side.

然后,如果需要,您可以通过添加来扩展安全模型:

  • differentiation between per-user and per-role rights
  • rights on specific resources
  • transitive rights
  • permissions for specific actions

但是在你的应用中可能并不需要如此复杂的用户权限和安全模型。

问题回答

除如下之外,我同意@Bozho的观点:

根据安全检查使UI的各部分可见/启用

实际上,您需要确保在服务器端阻止对数据等的未经授权访问,无论客户端UI是否可见/启用。 这样做的原因是任何客户端UI禁用代码都可能被颠覆。 实际上,一个坏人甚至可以完全绕过您的UI,并反向工程化您的客户端和服务器代码之间的应用程序特定协议。

这并不是说你不应该禁用/隐藏用户无权使用的UI部分。这仅仅是不是一个良好的安全访问控制的基础。

更新:@Bozho现在已经修改了他的答案,将服务器端阻止添加到了他的列表中。因此,我现在完全同意他的观点。

我同意Bozho。三个客户端方法中的另一个问题是:如果用户某种方式找出如何发送在他的客户端中不存在的操作呢?如果同一用户具有两个角色(因此需要拥有两个客户端),那该怎么办呢?当然,维护一个客户端就已经够忙了……





相关问题
Spring Properties File

Hi have this j2ee web application developed using spring framework. I have a problem with rendering mnessages in nihongo characters from the properties file. I tried converting the file to ascii using ...

Logging a global ID in multiple components

I have a system which contains multiple applications connected together using JMS and Spring Integration. Messages get sent along a chain of applications. [App A] -> [App B] -> [App C] We set a ...

Java Library Size

If I m given two Java Libraries in Jar format, 1 having no bells and whistles, and the other having lots of them that will mostly go unused.... my question is: How will the larger, mostly unused ...

How to get the Array Class for a given Class in Java?

I have a Class variable that holds a certain type and I need to get a variable that holds the corresponding array class. The best I could come up with is this: Class arrayOfFooClass = java.lang....

SQLite , Derby vs file system

I m working on a Java desktop application that reads and writes from/to different files. I think a better solution would be to replace the file system by a SQLite database. How hard is it to migrate ...

热门标签