shi*_*ppi 67 java spring resttemplate jira-rest-api
我在RestTemplate中是全新的,基本上也在REST API中.我想通过Jira REST API在我的应用程序中检索一些数据,但是要取回401 Unauthorized.找到并发表关于jira rest api文档的文章,但实际上并不知道如何将其重写为java,因为该示例使用curl命令行方式.我将不胜感激任何建议或建议如何重写:
curl -D- -X GET -H "Authorization: Basic ZnJlZDpmcmVk" -H "Content-Type: application/json" "http://kelpie9:8081/rest/api/2/issue/QA-31"
使用spring rest模板进入java.其中ZnJlZDpmcmVk是base64编码的username:password字符串.非常感谢你.
Ang*_*ity 125
从本网站上的示例中,我认为这将是最自然的方式,通过填写标头值并将标头传递给模板.
这是填写标题Authorization:
String plainCreds = "willie:p@ssword";
byte[] plainCredsBytes = plainCreds.getBytes();
byte[] base64CredsBytes = Base64.encodeBase64(plainCredsBytes);
String base64Creds = new String(base64CredsBytes);
HttpHeaders headers = new HttpHeaders();
headers.add("Authorization", "Basic " + base64Creds);
这是将标头传递给REST模板:
HttpEntity<String> request = new HttpEntity<String>(headers);
ResponseEntity<Account> response = restTemplate.exchange(url, HttpMethod.GET, request, Account.class);
Account account = response.getBody();
Ale*_*lex 69
您可以使用spring-boot RestTemplateBuilder
@Bean
RestOperations rest(RestTemplateBuilder restTemplateBuilder) {
    return restTemplateBuilder.basicAuthentication("user", "password").build();
}
见文档
(在SB 2.1.0之前#basicAuthorization)
att*_*ian 23
有多种方法可以将基本 HTTP 身份验证添加到RestTemplate.
try {
    // request url
    String url = "https://jsonplaceholder.typicode.com/posts";
    // create auth credentials
    String authStr = "username:password";
    String base64Creds = Base64.getEncoder().encodeToString(authStr.getBytes());
    // create headers
    HttpHeaders headers = new HttpHeaders();
    headers.add("Authorization", "Basic " + base64Creds);
    // create request
    HttpEntity request = new HttpEntity(headers);
    // make a request
    ResponseEntity<String> response = new RestTemplate().exchange(url, HttpMethod.GET, request, String.class);
    // get JSON response
    String json = response.getBody();
} catch (Exception ex) {
    ex.printStackTrace();
}
如果您使用的是 Spring5.1或更高版本,则不再需要手动设置授权标头。改用headers.setBasicAuth()方法:
// create headers
HttpHeaders headers = new HttpHeaders();
headers.setBasicAuth("username", "password");
@Service
public class RestService {
    private final RestTemplate restTemplate;
    public RestService(RestTemplateBuilder restTemplateBuilder) {
        this.restTemplate = restTemplateBuilder
                .basicAuthentication("username", "password")
                .build();
    }
   // use `restTemplate` instance here
}
@Bean
RestOperations restTemplateBuilder(RestTemplateBuilder restTemplateBuilder) {
    return restTemplateBuilder.basicAuthentication("username", "password").build();
}
我希望它有帮助!
Leo*_*eon 20
(也许)没有导入spring-boot的最简单方法.
restTemplate.getInterceptors().add(new BasicAuthorizationInterceptor("user", "password"));
Joh*_*Lim 17
参考Spring Boot的TestRestTemplate实现如下:
特别是,请参阅addAuthentication()方法,如下所示:
private void addAuthentication(String username, String password) {
    if (username == null) {
        return;
    }
    List<ClientHttpRequestInterceptor> interceptors = Collections
            .<ClientHttpRequestInterceptor> singletonList(new BasicAuthorizationInterceptor(
                    username, password));
    setRequestFactory(new InterceptingClientHttpRequestFactory(getRequestFactory(),
            interceptors));
}
同样,您可以RestTemplate轻松制作自己的
通过继承TestRestTemplate如下:
小智 12
从Spring 5.1开始,您可以使用 HttpHeaders.setBasicAuth
创建基本授权标头:
String username = "willie";
String password = ":p@ssword";
HttpHeaders headers = new HttpHeaders();
headers.setBasicAuth(username, password);
...other headers goes here...
将标题传递给RestTemplate:
HttpEntity<String> request = new HttpEntity<String>(headers);
ResponseEntity<Account> response = restTemplate.exchange(url, HttpMethod.GET, request, Account.class);
Account account = response.getBody();
文档:https : //docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/http/HttpHeaders.html#setBasicAuth-java.lang.String-java.lang.String-
小智 6
而不是实例化如下:
TestRestTemplate restTemplate = new TestRestTemplate();
就这样做:
TestRestTemplate restTemplate = new TestRestTemplate(user, password);
它对我有用,我希望它有所帮助!