Java 正在使用spring中由Basic Auth保护的HTTP POST方法

Java 正在使用spring中由Basic Auth保护的HTTP POST方法,java,spring,spring-boot,http-post,spring-rest,Java,Spring,Spring Boot,Http Post,Spring Rest,我想使用一个使用basicAuth保护的post方法。我正在使用springBoot、SpringRestTemplate来使用它 我试过这样做: @CrossOrigin(origins = "*", maxAge = 3600) @RequestMapping(value = "/ValidateAnswers", method = RequestMethod.POST) public ResponseEntity<String> ValidateAnswers(

我想使用一个使用basicAuth保护的post方法。我正在使用springBoot、SpringRestTemplate来使用它

我试过这样做:

@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;
    }
@CrossOrigin(origins=“*”,maxAge=3600)
@RequestMapping(value=“/ValidateAnswers”,method=RequestMethod.POST)
公共响应验证应答器(@RequestBody对象requestIbject,
HttpServletRequest请求,HttpServletResponse响应){
最终字符串uri=“foo:8080//validateAnswers”;
//在这里隐藏完整的路径,
RestTemplate RestTemplate=新RestTemplate();
String plainClientCredentials=“用户:通过”;
String base64ClientCredentials=新字符串(
Base64.encodeBase64(plainClientCredentials.getBytes());
HttpHeaders=新的HttpHeaders();
添加(“授权”、“基本”+base64ClientCredentials);
HttpEntity=新的HttpEntity(“参数”,
标题);
ResponseEntity respEntity=restTemplate.postForObject(uri、RequestObject、String.class);
//.exchange(uri,
//HttpMethod.POST,实体,String.class);
System.err.println(“=--------------响应-----------------”;
System.err.println(“----”+respEntity);
返回实体;
}

如果使用spring>4.3.1,如何通过basicAuth和post请求正文传递标题?

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

从您的代码片段中,我认为您不应该使用
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());  
    }  
}  
公共类测试{
私有HttpHeaders getHeaders(){
String plainCredentials=“admin:admin”;
字符串base64Credentials=Base64.getEncoder().encodeToString(plainCredentials.getBytes());
HttpHeaders=新的HttpHeaders();
添加(“授权”、“基本”+base64凭证);
返回标题;
}  
@试验
public void testLogin(){
RestTemplate RestTemplate=新RestTemplate();
HttpEntity请求=新的HttpEntity(getHeaders());
ResponseEntity response=restTemplate.exchange(“http://localhost:8080/login“,HttpMethod.GET,
请求,String.class);
System.out.println(response.getBody());
}  
}