java - 我无法从 Java 调用 SonarQube API 来搜索问题得到 410 错误
问题描述
嗨,我正在编写一个 OpenSource Springboot 微服务来从 SonarQube 获取问题 我使用 SonarQube 安装在 Docker 容器中 从浏览器登录后我成功调用:
http://localhost:9001/api/issues/search?componentKeys=za.co.nico:RabbitMqPoc
我正在对一个 Java 类进行单元测试,我可以调用相同的 URL 并在需要它工作的地方获得 401 失败的身份验证
package za.co.nico.poc.services;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.sonarqube.ws.client.GetRequest;
import org.sonarqube.ws.client.HttpConnector;
import org.sonarqube.ws.client.WsClient;
import org.sonarqube.ws.client.WsClientFactories;
import org.sonarqube.ws.client.WsResponse;
import org.springframework.stereotype.Service;
/**
*
* https://www.baeldung.com/java-http-request
*
*/
@Service
public class SonarServiceImpl implements SonarService {
private static final Logger log = LoggerFactory.getLogger(SonarServiceImpl.class);
private final String TOKEN="2ce06b3585c34141beeeb4005235337ba2bd135d";
/**
* https://programtalk.com/java-api-usage-examples/org.sonarqube.ws.client.WsClient/
*/
@Override
public String getData(String restUrl,String sonarEndPoint) {
log.debug(" restUrl : "+restUrl+" sonarEndPoint : "+sonarEndPoint); // restUrl : http://localhost:9001/ sonarEndPoint : api/components/search_projects
String login="admin";
String password="admin";
WsClient wsClient = WsClientFactories.getDefault().newClient(HttpConnector.newBuilder().url(restUrl).credentials(login, password).build());
WsResponse response = wsClient.wsConnector().call(new GetRequest("api/authentication/validate"));
String content = response.content();
log.debug(""+response.isSuccessful());
log.debug(""+response.code()); //200
response = wsClient.wsConnector().call(new GetRequest("api/components/search_projects"));
log.debug(""+response.isSuccessful());
content = response.content();
log.debug(""+response.code()); //401
wsClient = WsClientFactories.getDefault().newClient(HttpConnector.newBuilder().url(restUrl).credentials("admin", "admin").build());
response = wsClient.wsConnector().call(new GetRequest("local_ws_call/require_permission"));
log.debug(""+response.isSuccessful());
log.debug(""+response.code()); // 200
wsClient = WsClientFactories.getDefault().newClient(HttpConnector.newBuilder().url(restUrl).credentials(login, password).build());
response = wsClient.wsConnector().call(new GetRequest("api/rules/search"));
log.debug(""+response.isSuccessful());
log.debug(""+response.code()); // 401
return "";
}
}
请告知如何解决此问题
解决方案
401 错误仅表示您提供的身份验证凭据与预期不符。您似乎提供了“admin”和“admin”的用户名和密码,但我还看到您定义了一个未引用的“TOKEN”常量。我们不知道您如何配置您的 sonarqube 实例,或者实际需要什么凭据。根据我的经验,自动化脚本最好使用您似乎一直打算使用的“令牌”身份验证系统,但您根本没有正确传递它。
推荐阅读
- arrays - 将fileupload formdata转换为base64时的部分字符串
- c++ - 推力::inner_product 与推力::transform_reduce 寻找向量范数
- excel - 如何抑制由 EPM 加载项触发的 .NET 错误消息
- python - 如何创建相关字段?
- python - Rolling subtraction in pandas
- python - Building a multi-index db
- python - 在循环中执行python异步
- python - In Python: How to use the index number in an if-statement that is nested in a for-loop?
- android - How to translate animation from top?
- image - How to use another library in the tensorflow graph?