【问题标题】:How to access Spring REST API in JHipster with Spring RestTemplate如何使用 Spring RestTemplate 在 JHipster 中访问 Spring REST API
【发布时间】:2015-05-19 17:37:22
【问题描述】:

我已经设置了 JHipster,就像它的主页上描述的那样,它带有一些实体。使用 AngularJS 的前端效果很好,API 页面也可以让我按预期测试我的服务。

现在我正在尝试使用 Spring 的 RestTemplate 编写一个 REST-Client,如下所示:

public List<SomeEntity> getAllEntities(){
     URI uri = URI.create("http://localhost:8080/api/entities");
     HttpHeaders httpHeaders = this.createHeaders("admin", "admin")
     ResponseEntity<SomeEntity[]> responseEntity =  restTemplate.exchange(uri, HttpMethod.GET, new HttpEntity<SomeEntity>(httpHeaders), SomeEntity[].class);
     return Arrays.asList(responseEntity.getBody());
}


private HttpHeaders createHeaders(final String username, final String password ){
HttpHeaders headers =  new HttpHeaders(){
      {
         String auth = username + ":" + password;
         byte[] encodedAuth = Base64.encode(
            auth.getBytes(Charset.forName("US-ASCII")) );
         String authHeader = "Basic " + new String( encodedAuth );
         set( "Authorization", authHeader );
      }
   };
   headers.add("Content-Type", "application/json");
   headers.add("Accept", "application/json");

   return headers;
}

但这会导致以下错误: [WARN] org.springframework.web.client.RestTemplate - 对“http://localhost:8080/api/entities”的 GET 请求导致 401(未经授权);调用错误处理程序

现在我不确定我是否需要以及如何调整我的 HttpHeaders,或者我的简单基本身份验证处理方法是否完全错误。

【问题讨论】:

标签: spring rest spring-security resttemplate jhipster


【解决方案1】:

您的身份验证方式错误,似乎您在生成应用程序时选择了会话身份验证,因此这需要基于表单的身份验证而不是 http 基本身份验证,并且它需要能够存储会话 cookie 和 CSRF cookie,因此很可能使用公共 http客户。

也许在生成您的应用时选择 xauth 令牌身份验证会更简单。

一旦你得到这个工作,一旦你的客户端不会与你的 JHipster 应用程序在同一主机上运行,​​你就会遇到 CORS 问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-11
    • 2019-01-26
    • 1970-01-01
    • 2020-04-11
    • 2015-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多