我正在使用 eclipse 和“Tomcat 服务器”开发一个 j2ee 应用程序,在该应用程序中,我想在我的登录页面获取客户端系统的用户名,而不使用“LDAP”。
我已经使用了 System.getenv("username") ,但它给我的是服务器系统的用户名,而不是客户端系统的用户名。
然后我使用了 "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.xml 中声明的 tomcat-user 的用户名和密码。 结果它显示“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,要求用户给您用户名,或者使用您自己的身份验证来识别用户。
关于java - 如何在不使用 LDAP 的情况下在 java 中获取客户端系统的用户名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19402106/