1

我正在开发一个使用 Jespa 进行透明 SSO 的应用程序。我正在使用 NtlmSecurityProvider。在我的代码中,当我得到用户名时,如下所示:“DOMAINNAME\username”

例如

<% out.println(request.getRemoteUser()); %>

打印:MYDOMAIN\myusername

这是我的问题:

域名用户名总是这样吗?还是只是我们域中用户帐户的设置方式?就像,如果我切换到不同的 Windows 域,我是否可能只获得没有域和反斜杠的用户名?

谢谢!

4

2 回答 2

1

我在 serverfault.com 上问过这个问题。我从 Squillman 那里得到了很好的回答。(谢谢!)这里是:

“对于 Jespa 的人来说,这可能更像是一个支持问题。输出依赖于他们 API 的行为。

不过,一般来说,Windows 的最佳实践是始终使用 DOMAIN\username 格式或 username@domain 格式。

如果您担心格式更改,那么我建议您编写一个类/方法/实用程序,该类/方法/实用程序知道如何解析 getRemoteUser() 的结果并在您认为必要时将部分返回到您的应用程序。然后,如果它确实发生了变化,您只需更改一段代码即可修复您的应用程序。”

我写了一个方法来解析 getRemoteUser() 的结果,就像他建议的那样,到目前为止它运行良好。

于 2011-08-15T18:32:17.190 回答
1

这是高度可配置的。请参阅 Jespa 操作员手册的 NtlmSecurityProvider 属性部分中的 account.canonicalForm 属性。您可以将用户名设为 BUSICORP\sbackus 或 sbackus@busicorp.local 或只是 sbackus 或浏览器提供的任何内容(无规范化)。

例如,如果您希望 getRemoteUser 仅返回用户名而不返回域,请在 HttpSecurityService 属性文件中设置 jespa.account.canonicalForm = 2。但在多域环境中,使用合格的帐户名可能相当重要!

于 2011-11-01T03:17:51.423 回答