当前位置: 首页 > 知识库问答 >
问题:

如何使用Spring RestTemplate在JHipster中访问Spring REST API

劳研
2023-03-14

我已经用一些实体设置了JHipster,就像它的主页上描述的那样。AngularJS的前端工作得很好,API页面也让我测试我的服务。

现在,我尝试使用Spring的RestTemplate编写一个REST客户机,如下所示:

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-get请求“http://localhost:8080/api/entities”导致401(未经授权);调用错误处理程序

现在我不确定,我是否需要以及如何调整我的HttpHeaders,或者我的简单的basic-auth处理方法是否是错误的。

共有1个答案

孟高峰
2023-03-14

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

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

一旦你得到了这个工作,你将会有CORS问题,因为你的客户端将不会运行在相同的主机上与你的JHipster应用程序。

 类似资料:
  • 这表明Docker postgresql(正在运行)在该端口不可用。我尝试将添加到我的中,但没有成功。有什么提示吗?

  • 我试图找到以下元素并在其中输入文本。我尝试了许多不同的方法来访问该元素,但总是得到相同的错误。我当前的代码行 生成相同的错误 找不到元素:{“method”:“id”,“selector”:“keyword”} 下面显示的元素显然具有Id“keyword”。 我使用Firebug捕获此元素的完整XPath。 /html/body/div/span/table[3]/tbody/tr/td/tabl

  • 我正试图使用smb URL访问本地计算机上的文件夹。我的项目使用jar:commons-vfs2-2.0.jar和jcifs-1.3.17.jar(以及所有其他所需的jar)。完整的代码是: 我收到例外情况:

  • 我有一个基本的SpringMVC应用程序,运行(和映射)很好。现在我想用MockMvc设置我的单元测试来执行get请求和其他东西。但如果我运行测试,则会出现断言错误状态: 以下是我的短期测试课程: 所以我希望MockMvc在默认情况下获得DispatcherServlet的位置。但它实际上并不是用来映射的。 我的“web.xml”和“dispatcher servlet.xml”位于“web-IN

  • 我正在学习一些fullstack的东西。我创建了一个JHipster项目,并创建了一个名为Post的实体,其中有几个字段,比如主题、正文和文章作者的姓名。模型正在运行,我可以添加新帖子。问题是我想把实体放在主页上的一个块中,就像博客一样。这是我的主页: 这是我的组件。ts 函数loadAll()来自一个教程,在版本4中是一个角度,我的是9,它不工作。我添加了一个类响应包装器,但我不确定应该放什么,

  • 如果有其他的方法来配置jHipster中的石英作业,请告诉我。或者,如果jHipster为调度程序工作提供了开箱即用的功能,那就太好了。 石英作业依赖关系