Java 正在使用spring中由Basic Auth保护的HTTP POST方法
我想使用一个使用basicAuth保护的post方法。我正在使用springBoot、SpringRestTemplate来使用它 我试过这样做: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(
@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());
}
}