如何在不使用LDAP的情况下在java中获取客户端系统的用户名



我正在开发一个使用 eclipse 和"Tomcat Server"的 j2ee 应用程序,在该应用程序中,我想在我的登录页面上获取客户端系统的用户名,而无需使用"LDAP"。

我已经使用了System.getenv("用户名"),但它给了我服务器系统的用户名,而不是客户端系统的用户名。

然后我使用了"request.getRemoteUser()",但它给了我"NULL"值。同时,我还尝试"request.getUserPrincipal()","request.getAuthType()"。但这也给了我"空"值。当我探索为什么会给我"null"值时,我发现没有为应用程序定义身份验证级别。

因此,

因此,我将以下代码放在应用程序的Web.xml中:

<security-constraint> 
<web-resource-collection>
    <web-resource-name>demo_trial_application</web-resource-name>
    <url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint>
    <role-name>tomcat</role-name>
</auth-constraint>
<user-data-constraint>
    <transport-guarantee>NONE</transport-guarantee>
</user-data-constraint>
  </security-constraint>
  <login-config>
<auth-method>BASIC</auth-method>
  </login-config>

在web.xml中修改后(就像上面一样),当我通过URL执行我的应用程序时,会打开一个对话框并提示输入我在tomcat-users中声明的tomcat-user的用户名和密码.xml。结果它向我显示"Tomcat"作为用户名。

因此,通过上述过程,我没有获得客户端系统的用户名。

现在,除了服务器端,我还尝试了JavaScript代码来获取客户端系统的用户名,如以下代码:

var winNetwork=new ActiveXObject("WScript.Network");
        alert("User Name :"+winNetwork.UserName);

var winShell=new ActiveXObject("WScript.Shell");
        alert(winShell.ExpandEnvironmentStrings("%USERNAME%")); 

但是上面的代码仅适用于Internet Explorer,因为我使用了"ActiveXObject"并且它只能在Internet Explorer中工作。因此,上面的JavaScript代码增加了浏览器兼容性问题。

所以请你告诉我"如何通过Java或Javascript访问客户端系统的用户名?",但我不想为此使用"LDAP"。

你不能。出于安全原因,您在浏览器中访问的 Web 应用程序将无法访问有关客户端计算机的此类信息。您可以坚持使用 IE 并使用 ActiveX,要求用户为您提供用户名,或者使用自己的身份验证来识别用户。