获取连接到Web服务器的客户端的用户名

Kyl*_*leM 8 java spring spring-security windows-authentication single-sign-on

这是场景.我是在AD域中的Web服务器上运行的代码.有些客户与我有联系.如何在不让客户在浏览器中填写表单的情况下获取该客户端的用户名?必须在Web服务器端使用Java技术.

编辑:

我最终使用了Spring Security Negotiate Filter,如下面的链接所述.有一个教程可用.在servlet中使用request.getPrincipal().getName()会给出用户名.

http://waffle.codeplex.com/

Pet*_*ien 11

您需要设置Spring Security Kerberos扩展 - 这是您在Spring Security 3中执行所述操作的唯一方法.这支持SPNEGO协商,但需要在服务器上进行一些设置(以及SPNEGO和Kerberos如何工作).

没有太多的文档 - 但Mike的1.0M2附带的示例应用程序非常棒,涵盖了大多数常见场景,包括自动SPNEGO身份验证.

SPNEGO的关键是设置一个自定义AuthenticationEntryPoint- 您需要使用自定义spring bean执行此操作,如下所示:

<bean id="kerbEntryPoint" class="org.springframework.security.extensions.kerberos.web.SpnegoEntryPoint" />

<bean id="kerbAuthenticationProcessingFilter" class="org.springframework.security.extensions.kerberos.web.SpnegoAuthenticationProcessingFilter">
    <property name="authenticationManager" ref="authenticationManager" />
</bean>
Run Code Online (Sandbox Code Playgroud)

...除了这些之外还需要更多的bean(再次参考带有Kerberos扩展的示例).如果您进一步了解Spring Security或者如果您需要确切的详细信息(因为涉及到许多bean/config位,请对您的配置有所了解,例如您是否使用<http>命名空间样式),请回发.

除了这个选项,你必须设置一个类似类型的SPNEGO auth(例如使用WAFFLE,如你所说) - 其他SO问题很好地涵盖了这一点.

最后,您可以将Tomcat与另一个更好地支持SPNEGO或NTLM的Web服务器连接在一起,例如Microsoft IIS或带有mod_spnego的 Apache Web Server .

希望其中一个想法对你有用!


aba*_*ogh 6

您的用户使用哪种浏览器?如果是IE; 有一个简单的解决方案:

<html>
<script type="text/javascript">
var WinNetwork = new  ActiveXObject("WScript.Network");
alert(WinNetwork.UserName);
</script>
</html>
Run Code Online (Sandbox Code Playgroud)