我正在使用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.ioforumspring-projectssecurity122250-spring-security-3-kerberos-spn。
谢谢你了
詹姆斯
只是一个快速的想法。
你可以定义两个 SunJaasKerberosTicketValidator
实例,每个实例都有自己的域,然后实现自己的 KerberosTicketValidator
它将根据HTTP请求委托给底层JAAS验证器。
如果您使用的是 RequestContextListener
:
HttpServletRequest request = (HttpServletRequest) ((ServletWebRequest)
RequestContextHolder.currentRequestAttributes()).getNativeRequest();
Pavel是对的,只是在ClassCastException尝试的情况下。
RequestAttributes requestAttributes = RequestContextHolder.currentRequestAttributes();
HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest()