Spring REST 模板 - 401 未经授权的错误

Tin*_*iny 1 spring resttemplate spring-boot spring-rest

我在 Spring Boot 应用程序中使用 Spring Rest 模板。

即使我传递了凭据,我总是收到 401 未经授权的错误。

我可以通过 Chrome REST Web 服务客户端访问此服务。

有没有一种简化的方法来访问SpringBoot中的REST模板。

下面是迄今为止导致 401 错误的代码片段

 private DetailsBean invokeDetailsRestService(UserParam userParam){
    ResponseEntity<DetailsBean> responseEntity = null;
    String url = "https://dev.com/app/identifyuser/";
    RestClientConfig restClientConfig =new RestClientConfig("user123","pass123");
    responseEntity= restClientConfig.postForEntity(url, userParam, DetailsBean.class);
    log.debug("User Details : {} ", responseEntity.getBody());
    return responseEntity.getBody();
}

public ClientHttpRequestFactory getRequestFactory(String userName,String password){
    CredentialsProvider credsProvider = new BasicCredentialsProvider();
    credsProvider.setCredentials( new AuthScope(null, -1), new UsernamePasswordCredentials(userName,password) );
    HttpClient httpClient = HttpClients.custom().setDefaultCredentialsProvider(credsProvider).build();
    return new HttpComponentsClientHttpRequestFactory(httpClient);
}
Run Code Online (Sandbox Code Playgroud)

RestClientConfig 类

  public RestClientConfig(String username, String password) {
    CredentialsProvider credsProvider = new BasicCredentialsProvider();
    credsProvider.setCredentials(
            new AuthScope(null, -1),
            new UsernamePasswordCredentials(username, password));
    HttpClient httpClient = HttpClients.custom().setDefaultCredentialsProvider(credsProvider).build();
    setRequestFactory(new HttpComponentsClientHttpRequestFactory(httpClient));
}
Run Code Online (Sandbox Code Playgroud)

错误:

WARN c7af55b5-1cac-4db6-a202-202416c27ba4 
 12612 --- [apr-8082-exec-8] o.a.http.impl.auth.HttpAuthenticator    
: NEGOTIATE authentication error: 
No valid credentials provided (Mechanism level: 
No valid credentials provided (Mechanism level: 
Failed to find any Kerberos tgt))
Run Code Online (Sandbox Code Playgroud)

Tin*_*iny 5

使用以下代码修复了授权问题。

应使用以下代码将凭证传递到 Spring REST 模板:

   String userAndPass = "Test:Test123";

   HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_XML);
    headers.add("Authorization", "Basic " +  Base64Utility.encode(userAndPass.getBytes()));
Run Code Online (Sandbox Code Playgroud)