java - java Authenticator 类不在 POST 上进行身份验证
问题描述
我正在创建一个 Spring Boot REST 完整服务来向 CRM Dynamics 发送 GET 和 POST 请求。
CRM Dynamics 使用 OData REST Web 服务和 NTLM 身份验证。
就我而言,我在这段代码中使用Authenticator.setDefault(authenticator)进行身份验证(DAO 构造函数)
public CRMIntegrationDAO() {
NtlmAuthenticator authenticator = new NtlmAuthenticator(CRMProps.getLogin(), CRMProps.getPassword());
Authenticator.setDefault(authenticator);
}
但奇怪的是,这个类没有在 POST 请求上验证我的应用程序。如果我首先发出 GET 请求,它可以正常工作,其他 GET 和 POST 也可以。但是,如果我想先发布 POST,我会收到401:未经授权。
在日志中,我可以看到在 GET 请求中,我的应用程序调用 CRM Dynamics 两到三次以获得授权。但是在 POST 上它只创建一个请求。
该类是否有任何解决方法或任何其他用于 Java/Spring Boot 中 NTLM 身份验证的解决方案(除了在 POST 之前调用 GET)。
PS CRM Dynamics 管理员说 Dynamics 端没有 API 会话设置。
先感谢您。
DAO 类中 POST 请求的 PS 代码
public ResponseEntity<String> processPOSTNewTask(String body) {
log.debug(String.format("DAO received parameters: %s", body));
String url = CRMProps.getUrl() + CRMProps.getTaskEntity();
try {
return processPOST(url, body);
} catch (Exception e) {
return GlobalUtils.buildErrorResponseEntity(Utils.MODULE_NAME, e.getMessage());
}
}
private ResponseEntity<String> processPOST(String url, String body) {
RestTemplate restTemplate = new RestTemplate();
HttpEntity<String> entity = new HttpEntity(body, setHeaders());
log.debug("headers " + entity.getHeaders());
ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.POST, entity, String.class);
return response;
}
解决方案
推荐阅读
- python - Tensorflow tf.keras.layers.Reshape RNN/LSTM
- jira-plugin - 如何获得“ACCESS_EMAIL_ADDRESSES”范围以在 jira 上开发应用程序
- ios - 无法使用 Kingfisher 显示来自 url 的图像
- javascript - 如何解决无法读取null属性addEventListener的问题
- python - 您可以在 Seaborn 点图中缩放单个色调变量吗?
- python-3.x - 更改 pandas to_sql 函数中的默认 NULL 值
- apache-spark - Spark中如何创建分区
- java - 如何在 Gitlab CI 上实现 Docker 虫洞模式
- javascript - 从 React.js 频道获取所有 youtube 视频
- c++ - 为什么成员分配在初始化列表中失败,但在构造函数中却没有?