使用HTTP POST方法,该方法在Spring中使用Basic Auth进行保护

时间:2018-04-09 23:23:00

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

我想使用一个使用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传递标题并发布请求正文?

2 个答案:

答案 0 :(得分:1)

如果你使用spring&gt; 4.3.1

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

答案 1 :(得分:0)

从您的代码段开始,我认为您不应该使用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());  
    }  
}