2

我正在使用 spring-security 3.0.2.RELEASE 和 spring-security-kerberos-core 1.0.0.M2 来实现基于 SPNEGO 的身份验证。

服务器有多个有效的 DNS 名称。一个是指机器本身(machine.domain),另一个是指应用程序(app.domain)。目前没有设置反向代理。

我需要确保 SPNEGO 适用于两个有效的 DNS 名称。事实上,我将机器名称设置为 SPN。如果我使用 IE7 连接到应用程序,它可以连接到机器名称,但不能连接到应用程序名称(HTTP 401)。

我正在使用 SunJaasKerberosTicketValidator 来验证票证,但它一次只允许配置一个 SPN。

如何配置我的应用程序以使用多个 SPN?是否只需使用 setspn 将 SPN 添加到列表中?还是我需要设置多个票验证器?

我的问题与这个问题非常相似(没有答案):http: //forum.spring.io/forum/spring-projects/security/122250-spring-security-3-kerberos-spn

非常感谢,

詹姆士

4

2 回答 2

1

只是一个快速的想法:

您可以定义两个SunJaasKerberosTicketValidator实例,每个实例用于其域,然后实现您自己的实例,该实例KerberosTicketValidator将根据 HTTP 请求委托给底层 JAAS 验证器。

如果您使用,您可以从验证器获取请求RequestContextListener

HttpServletRequest request = (HttpServletRequest) ((ServletWebRequest) 
        RequestContextHolder.currentRequestAttributes()).getNativeRequest();
于 2013-10-29T20:07:32.470 回答
0

Pavel 是对的,以防万一 ClassCastException 尝试:

RequestAttributes requestAttributes = RequestContextHolder.currentRequestAttributes();
HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest()
于 2020-04-27T10:08:49.293 回答