【问题标题】:Determine if given OS name is server-based or desktop-based确定给定的操作系统名称是基于服务器的还是基于桌面的
【发布时间】:2018-08-03 05:37:42
【问题描述】:

我的基于 java 的应用程序安装在许多用户的计算机上。在第一次运行期间,它会自动将用户的操作系统名称发送到我的服务器并存储在数据库中。我使用System.getProperty("os.name"); 在该应用程序中获取用户的操作系统名称。是否可以确定这是基于服务器的计算机(Windows Server 2012 Standard)还是台式计算机(Ubuntu,Windows 7)?

有没有什么方法可以用 Java 确定服务器和台式机之间的关系?

【问题讨论】:

  • 为什么System.getProperty("os.name")会给你用户的操作系统?
  • @melpomene 我需要知道他使用的计算机类型(台式机/服务器)!
  • 这不能回答我的问题。你只是在重复你在帖子中所说的话。
  • 它给出了用户的操作系统名称。这是 jvm 中的默认行为!
  • 不,它没有。它为您提供 Web 服务器的操作系统名称。

标签: java server operating-system


【解决方案1】:

我在基于 Java 的 Web 应用程序中使用 System.getProperty("os.name"); 来获取用户的操作系统名称。

这将为您获取运行 Web 应用程序的服务器的操作系统名称,而不是用户的计算机。

您可以尝试从浏览器的 User-Agent 标头中提取操作系统信息,但这本质上是一个容易出错的过程。此外,Microsoft Windows 是唯一具有您正在寻找的那种服务器/桌面的清晰区分的操作系统; Linux 和 macOS 没有这样的区别。

【讨论】:

  • 容易出错并且不安全,如果您将它用于输入验证、强制执行许可证等任何事情。就像您从客户端调用获得的任何和所有输入一样,你应该假设它在撒谎,除非你能证明不是这样。标头很容易被欺骗或更改。
  • 操作系统名称不会像 Web 应用一样通过 Header 发送。该应用程序是独立的,并向服务器发出 POST 请求!
【解决方案2】:

是否有任何可能的方法来使用 Java 确定服务器和台式计算机之间的关系?

(假设您可以获取相关机器的“os.name”属性的值。)

答案是没有可靠的方法。

首先,服务器和台式计算机之间没有硬性区别。我可以安装 Linux 的无头服务器,只需安装几个软件包即可将其变成桌面 Linux。操作系统不变,分布不变,“os.name”属性中的字符串也不变。

您能做的最好的事情就是找出各种common Java + OS 平台上“os.name”字符串的常见模式。但这充其量是脆弱的。

【讨论】:

    猜你喜欢
    • 2019-08-18
    • 1970-01-01
    • 1970-01-01
    • 2015-09-05
    • 2010-09-14
    • 1970-01-01
    • 1970-01-01
    • 2015-12-29
    • 2013-05-02
    相关资源
    最近更新 更多