У меня есть приложение логики Azure с триггером запроса. Я хочу запустить это приложение логики из своего Java-приложения. Итак, я пытаюсь вызвать URL-адрес триггера запроса из моего Java API.
Он работает нормально, если я нажимаю на почтальона, приложение логики с срабатыванием триггера запроса через почтальона
но получение 401 при вызове с помощью RestTemplate в java.
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;
@RestController
public class SampleController {
@RequestMapping(value = "/display",method = RequestMethod.GET)
public ResponseEntity<String> display()
{
System.out.println("entered");
RestTemplate restTemplate = new RestTemplate();
String url = "https://pt-38.northeurope.logic.azure.com/workflows/cc0363a3bf134efca43b0bd2d15d5ed5/triggers/manual/paths/invoke?api-version=2016-10-01&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=HnllGcN9xo91kRGAjk";
HttpHeaders headers = new HttpHeaders();
headers.set("api-version", "2016-10-01");
headers.set("sp", "%2Ftriggers%2Fmanual%2Frun");
headers.set("sv", "1.0");
headers.set("sig", "HnllGcN9xo91kRGAjk3Zlp6fW0dhwf");
HttpEntity request = new HttpEntity(headers);
ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.GET, request, String.class);
// JSONObject obj = new JSONObject(response.getBody());
// System.out.println("obj");
return response;
}
}
приложение логики с доступом к триггеру запроса через шаблон отдыха
В соответствии с предложением Хьюри Шена я изменил код API, как показано ниже,
public HttpEntity<String> display1()
{
System.out.println("entered");
RestTemplate restTemplate = new RestTemplate();
String url = "https://prod-38.northeurope.logic.azure.com/workflows/cc0363a3bf134efca43b0bd2d15d5ed5/triggers/manual/paths/invoke?api-version=2016-10-01&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=HnllGcN9xo91kRGAjk3Zlp6fW0dhwfaRij-fk1CC60c";
HttpHeaders headers = new HttpHeaders();
headers.set("Accept", MediaType.APPLICATION_JSON_VALUE);
UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url)
.queryParam("api-version", "2016-10-01")
.queryParam("sp", "%2Ftriggers%2Fmanual%2Frun")
.queryParam("sv", "1.0")
.queryParam("sig", "HnllGcN9xo91kRGAjk3Zlp6fW0dhwfaRij-fk1CC60c");
HttpEntity<?> entity = new HttpEntity<>(headers);
HttpEntity<String> response = restTemplate.exchange(
builder.toUriString(),
HttpMethod.GET,
entity,
String.class);
return response;
}




Для этой проблемы мы должны указать значения api-version, sp, sv и sig в параметрах запроса, а не помещать их в заголовки.
Сделай это так:
Map<String, String> params = new HashMap<String, String>();
params.put("api-version", "xxxx");
params.put("sp", "xxxxx");
params.put("sv", "xxx");
params.put("sig", "xxxxxxx");
.....
ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.GET, request, String.class, params);
Я добавил последний результат после изменения api в соответствии с вашим предложением.
Привет @ganthota Поскольку вы добавили параметры в код, пожалуйста, измените url с String url = "https://prod-38.northeurope.logic.azure.com/workflows/cc0363a3bf134efca43b0bd2d15d5ed5/triggers/manual/paths/invoke?api-version=2016-10-01&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=HnllGcN9xo91kRGAjk3Zlp6fW0dhwfaRij-fk1CC60c"; на String url = "https://prod-38.northeurope.logic.azure.com/workflows/cc0363a3bf134efca43b0bd2d15d5ed5/triggers/manual/paths/invoke"; в своем коде.
Я изменил URL-адрес, поскольку вы предложили получить ошибку ниже: "сообщение": "401 Неавторизованный: [{\" ошибка \ ": {\" код \ ": \" Авторизация не удалась \ ", \" сообщение \ ": \" У вас нет прав на выполнение действия "запустить" в области "/ триггеры / руководство / пути / вызов /". Убедитесь, что вы отправляете запрос с помощью соответствующего метода HTTP. Подробнее см. aka.ms/logic-trigger. \ "}}]",
@ganthota Пожалуйста, измените код с .queryParam("sp", "%2Ftriggers%2Fmanual%2Frun") на .queryParam("sp", "/triggers/manual/run")
Вы должны защитить свое приложение Logic с помощью токена AAD или управляемого удостоверения.
Вставка URL-адреса в браузере:
[{"ruCode":"00","ruName":"RETAIL UNIT, CHINA","ruNameShort":"CHINA","ruCategory":"Physical","insDate":"2020-08-11 12:13:00","updDate":"2020-08-12 12:13:00"},{"ruCode":"FF","ruName":"FF","ruNameShort":"FF","ruCategory":"FFF","insDate":"2020-09-01 22:00:00","updDate":"2020-09-01 22:00:00"},{"ruCode":"IK","ruName":"Retail Unit, IKEA","ruNameShort":"IK","ruCategory":"Physical","insDate":"2020-09-03 22:00:00","updDate":"2020-09-03 22:00:00"},{"ruCode":"TestRU","ruName":"TestRU","ruNameShort":"TR","ruCategory":"Physical","insDate":"2021-03-29 10:58:52","updDate":"2021-03-29 10:58:56"},{"ruCode":"CN","ruName":"RETAIL UNIT, CHINA","ruNameShort":"CHINA","ruCategory":"Physical","insDate":"2020-08-13 11:25:09","updDate":"2020-08-13 11:25:09"},{"ruCode":"AU","ruName":"RETAIL UNIT, AU","ruNameShort":"AUSTRALIA","ruCategory":"Physical","insDate":"2020-08-09 11:25:09","updDate":"2020-08-09 11:25:09"},{"ruCode":"FR","ruName":"RETAIL UNIT, FR","ruNameShort":"FRANCE","ruCategory":"Physical","insDate":"2020-08-13 11:25:09","updDate":"2020-08-13 11:25:09"},{"ruCode":"AU","ruName":"RETAIL UNIT, AU","ruNameShort":"AUSTRALIA","ruCategory":"Physical","insDate":"2020-08-09 11:25:09","updDate":"2020-08-09 11:25:09"},{"ruCode":"GG","ruName":"GG","ruNameShort":"GG","ruCategory":"GG","insDate":"2020-08-06 22:00:00","updDate":"2020-08-06 22:00:00"},{"ruCode":"NN","ruName":"RETAIL UNIT, NN","ruNameShort":"NN","ruCategory":"Physical","insDate":"2020-09-09 22:00:00","updDate":"2020-09-09 22:00:00"},{"ruCode":"QQ","ruName":"Retail Unit QQ","ruNameShort":"QQ","ruCategory":"Physical","insDate":"2020-09-10 22:00:00","updDate":"2020-09-10 22:00:00"},{"ruCode":"WW","ruName":"Retail Unit WW","ruNameShort":"WW","ruCategory":"Physical","insDate":"2020-09-09 22:00:00","updDate":"2020-09-09 22:00:00"},{"ruCode":"ZZ","ruName":"RetailUnit ZZ","ruNameShort":"ZZ","ruCategory":"Physical","insDate":"2020-09-10 22:00:00","updDate":"2020-09-10 22:00:00"},{"ruCode":"ZZZ","ruName":"Retail Unit ZZZ","ruNameShort":"ZZZ","ruCategory":"Physical","insDate":"2020-09-10 22:00:00","updDate":"2020-09-10 22:00:00"},{"ruCode":"AAA","ruName":"Retail Unit AAA","ruNameShort":"AAAA","ruCategory":"Physical","insDate":"2020-09-10 22:00:00","updDate":"2020-09-10 22:00:00"},{"ruCode":"LLL","ruName":"Retail Unit LLL","ruNameShort":"LLL","ruCategory":"Physical","insDate":"2020-09-06 22:00:00","updDate":"2020-09-06 22:00:00"}]
Пожалуйста, обратитесь к решению, которое я предоставил ниже. Если это поможет вашей проблеме, пожалуйста, прими это как ответ (нажмите на галочку рядом с моим ответом, чтобы переключить его с серого на заполненный). Заранее спасибо ~