1

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

从文档

如果要使用缓存票证,keyTabLocation请留空。userPrincipal

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

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)

我在这里做错了什么?

4

2 回答 2

0

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

也可以尝试以下选项:

  1. 如果要自定义 Krb5LoginModule 选项,请使用 loginOptions。
  2. 使用自定义的 httpClient。
于 2016-10-25T11:20:21.907 回答
0

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

 KerberosRestTemplate restTemplate = new KerberosRestTemplate(null,"-");
于 2017-10-05T09:48:56.060 回答