使用spring-security SPNEGO时如何使用多个SPN

时间:2013-10-21 15:18:17

标签: spring spring-security kerberos spnego

我使用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

非常感谢,

詹姆斯

2 个答案:

答案 0 :(得分:1)

快速思考:

您可以为其域定义两个SunJaasKerberosTicketValidator实例,然后实现您自己的KerberosTicketValidator,它将根据HTTP请求委托给基础JAAS验证程序。

如果您使用RequestContextListener

,您可以从验证者处获得请求
HttpServletRequest request = (HttpServletRequest) ((ServletWebRequest) 
        RequestContextHolder.currentRequestAttributes()).getNativeRequest();

答案 1 :(得分:0)

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

import os
for count, filename in enumerate(os.listdir("someDir")):
    dst = "name" + str(count) + ".png"
    src = 'someDir' + filename
    dst = 'someDir' + dst
    # rename() function will rename all the files
    os.rename(src, dst)