如何使用spring rest模板访问kerberos SPNEGO经过身份验证的资源

时间:2016-10-25 08:26:52

标签: java spring kerberos spring-rest spring-security-kerberos

我在尝试使用Spring rest客户端访问kerberos SPNEGO经过身份验证的资源时遇到了问题。我正在使用KerberosRestTemplate

来自文档

  

如果要使用缓存票证,请将keyTabLocationuserPrincipal留空。

但是当我尝试调用无参数构造函数

this.kerberosRestTemplate = new KerberosRestTemplate();

尝试访问受保护的受保护资源,但出现以下错误:

org.springframework.web.client.RestClientException: Error running rest call; nested exception is java.lang.IllegalArgumentException: Null name not allowed
    at org.springframework.security.kerberos.client.KerberosRestTemplate.doExecute(KerberosRestTemplate.java:196) 
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:538) 
    at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:245) 
Caused by: java.lang.IllegalArgumentException: Null name not allowed
        at sun.security.krb5.PrincipalName.<init>(PrincipalName.java:356) ~[?:1.7.0_67]
        at javax.security.auth.kerberos.KerberosPrincipal.<init>(KerberosPrincipal.java:123) ~[?:1.7.0_67]
        at org.springframework.security.kerberos.client.KerberosRestTemplate.doExecute(KerberosRestTemplate.java:182)

我在这里做错了什么?

2 个答案:

答案 0 :(得分:0)

请尝试这些spring-security-kerberos。我认为你缺少可以通过基于xml或java配置实现的基本配置。

还可以尝试以下选项:

  1. 如果要自定义Krb5LoginModule选项,请使用loginOptions。
  2. 使用自定义的httpClient。

答案 1 :(得分:-1)

只需为keyTabLocation调用构造函数为null,为userPrincipal调用任何非空字符串,如下所示:

 KerberosRestTemplate restTemplate = new KerberosRestTemplate(null,"-");