这是场景。我在AD域中的Web服务器上运行代码。一些客户与我建立了联系。我如何获取该客户的用户名,而无需让客户在其浏览器中填写表格?必须在Web服务器端使用Java技术。

编辑:

我最终使用了Spring Security协商过滤器,如下面的链接所述。有可用的教程。在Servlet中使用request.getPrincipal()。getName()给出用户名。

http://waffle.codeplex.com/

最佳答案

您需要设置Spring Security Kerberos extension-这是完成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>

...除了这些之外,还需要更多的bean(同样,请引用带有Kerberos扩展的示例)。如果您对Spring Security有了进一步的了解或想要确切的细节,请回发(由于涉及许多bean/配置位,因此对配置的一些了解会有所帮助,例如是否使用<http>命名空间样式) )。

除了此选项之外,您还必须设置类似类型的SPNEGO身份验证(如您建议的那样使用WAFFLE)-other SO questions可以很好地解决这一问题。

最后,您可能会在Tomcat上使用另一个更好地支持SPNEGO或NTLM的Web服务器,例如Microsoft IIS或带mod_spnego的Apache Web Server。

希望这些想法之一对您有用!

10-06 11:06