【问题标题】:Consuming HTTP POST method which is secured with Basic Auth in spring使用 Spring 使用 Basic Auth 保护的 HTTP POST 方法
【发布时间】:2018-04-09 23:23:00
【问题描述】:

我想使用一个使用 basicAuth 保护的 post 方法。我正在使用 springBoot,Spring RestTemplate 来消费它。

我试过这样:

@CrossOrigin(origins = "*", maxAge = 3600)
    @RequestMapping(value = "/ValidateAnswers", method = RequestMethod.POST)
    public ResponseEntity<String> ValidateAnswers(@RequestBody Object requestIbject,
            HttpServletRequest request, HttpServletResponse response) {
        final String uri = "foo:8080//validateAnswers";
// hiding full path here, 

        RestTemplate restTemplate = new RestTemplate();
        String plainClientCredentials = "user:pass";
        String base64ClientCredentials = new String(
                Base64.encodeBase64(plainClientCredentials.getBytes()));
        HttpHeaders headers = new HttpHeaders();
        headers.add("Authorization", "Basic " + base64ClientCredentials);

        HttpEntity<String> entity = new HttpEntity<String>("parameters",
                headers);

        ResponseEntity<String> respEntity = restTemplate.postForObject(uri, requestIbject, String.class);
//              .exchange(uri,
//              HttpMethod.POST, entity, String.class);
        System.err.println("=------------Response--------------");
        System.err.println("----" + respEntity);
        return respEntity;
    }

如何使用 basicAuth 传递标头并发布请求正文?

【问题讨论】:

    标签: java spring spring-boot http-post spring-rest


    【解决方案1】:

    如果你使用 spring > 4.3.1

    RestTemplate restTemplate = new RestTemplate();
    restTemplate.getInterceptors().add(new BasicAuthorizationInterceptor("user", "password"));
    

    【讨论】:

      【解决方案2】:

      从你的代码 sn-ps 我认为你不应该使用post 方法,先试试get。并参考我之前的测试:

      public class Test {  
      
          private HttpHeaders getHeaders(){  
              String plainCredentials="admin:admin";  
              String base64Credentials = Base64.getEncoder().encodeToString(plainCredentials.getBytes());  
              HttpHeaders headers = new HttpHeaders();  
              headers.add("Authorization", "Basic " + base64Credentials);  
              return headers;  
          }  
      
          @Test  
          public void testLogin() {  
              RestTemplate restTemplate = new RestTemplate();  
              HttpEntity<String> request = new HttpEntity<String>(getHeaders());  
              ResponseEntity<String> response = restTemplate.exchange("http://localhost:8080/login", HttpMethod.GET,  
                      request, String.class);  
              System.out.println(response.getBody());  
          }  
      }  
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-10
        • 1970-01-01
        • 1970-01-01
        • 2011-10-21
        相关资源
        最近更新 更多