I am using camunda-spring-boot-starter 8.8.2 with c8run 8.8.2
and in my application.properties I have disabled camundaClient as follows:
camunda.client.enabled=false
camunda.client.grpc-address=http://localhost:26500
camunda.client.rest-address=http://localhost:8080
camunda.client.prefer-rest-over-grpc=false
and my CamundaClientConfig is as follows:
@Configuration
public class CamundaClientConfig {
@Value("${camunda.client.rest-address}")
private String camundaRestAddress;
@Value("${camunda.client.grpc-address}")
private String camundaGrpcAddress;
@Value("${camunda.client.prefer-rest-over-grpc}")
private boolean preferRestOverGrpc;
@Bean
public CamundaClient camundaClient() {
CamundaClientBuilder builder = CamundaClient.newClientBuilder();
builder.credentialsProvider(new BearerTokenCredentialsProvider());
builder.restAddress(URI.create(camundaRestAddress));
builder.grpcAddress(URI.create(camundaGrpcAddress));
builder.preferRestOverGrpc(preferRestOverGrpc);
return builder.build();
}
}
my BearerTokenCredentialsProvider:
public class BearerTokenCredentialsProvider implements CredentialsProvider {
public BearerTokenCredentialsProvider() {
}
@Override
public void applyCredentials(final CredentialsApplier applier) {
applier.put("Authorization", SecurityUtils.getBearerToken());
}
@Override
public boolean shouldRetryRequest(final StatusCode status) {
return status.isUnauthorized();
}
}
the getBearerToken method:
public static String getBearerToken() {
var authentication = SecurityContextHolder.getContext().getAuthentication();
if (authentication instanceof JwtAuthenticationToken jwtAuth) {
String bearerToken = jwtAuth.getToken().getTokenValue();
return "Bearer " + bearerToken;
}
return null;
}
my createProcess instance API:
@PostMapping("/process-instances/create")
@PreAuthorize("isAuthenticated()")
ProcessInstanceEvent createProcessInstance(@RequestBody CreateProcessInstanceRequest createProcessInstanceRequest) {
return camundaService.createProcessInstance(createProcessInstanceRequest);
}
my camundaService.createProcessInstance:
public ProcessInstanceEvent createProcessInstance(CreateProcessInstanceRequest request) {
if (request.getVariablesMap() == null) {
request.setVariablesMap(new HashMap<String, Object>());
}
request.getVariablesMap().put(CamundaVariables.CREATOR, SecurityUtils.getUserNameFromAccessToken());
request.getVariablesMap().put(CamundaVariables.REQUEST_STATUS_NAME, "DRAFT");
// bearerToken here is correct and NOT NULL
log.info("####### bearerToken before newCreateInstanceCommand(): " + SecurityUtils.getBearerToken());
// implicit call here for BearerTokenCredentialsProvider where
// SecurityUtils.getBearerToken() will be NULL
ProcessInstanceEvent processInstanceEvent = camundaClient.newCreateInstanceCommand().bpmnProcessId(request.getBpmnProcessId()).latestVersion().variables(request.getVariablesMap()).send().join();
return processInstanceEvent;
}
Please advise why the bearer token is NULL inside BearerTokenCredentialsProvider
NOTE: using other camundaClient methods works fine witn no issues like:
camundaClient.newCompleteUserTaskCommand(taskId)