Перенаправить использование и параметры POST - PullRequest
1 голос
/ 15 июня 2019

Я хочу реализовать этот пример с помощью Spring:

@PostMapping(value = "/redirect/to_payment/{token}")
public ModelAndView handleRedirectMessage(@PathVariable("token") String token,
        @RequestBody Transaction transaction, HttpServletRequest request) throws Exception {

    String url = "http://www.someserver.com";
    String post_token = "1234561234543322";

    // Open here the link and redirect the

    return new ModelAndView("redirect:" + url); 
}

Как я могу открыть эту ссылку, отправить post_token как параметр POST и вернуть открытую страницу пользователю?

Есть ли способ реализовать это решение для пользователя?В качестве второго решения я могу вернуть эту страницу пользователю и включить post_token в качестве параметра?

Ответы [ 3 ]

1 голос
/ 17 июня 2019

Вы можете использовать зависимость okhttp3 и отправить http-запрос с сервера, а затем вернуть клиенту тело ответа объекта okhttp.

Вот пример:

@PostMapping(value = "/redirect/to_payment/{token}")
  public ModelAndView handleRedirectMessage(@PathVariable("token") String token,
          @RequestBody Transaction transaction, HttpServletRequest request) throws Exception {

    String url = "http://www.someserver.com";
    String post_token = "1234561234543322";

    OkHttpClient client = new OkHttpClient();

    Request request = new Request.Builder()
         .url(url)
         .post(null) // because u have no body
         .addHeader("Authorization", post_token)
         .addHeader("cache-control", "no-cache")
         .build();
    Response response = client.newCall(request).execute();

    return new ModelAndView(response.body().toString()); // or something like this
}

Конечновам нужно обработать IOException, а метод body в конце может немного отличаться.

Один совет: вы можете использовать почтальон для генерации кода запроса OkHttp или Unirest, легко имитируя ваш запрос.

0 голосов
/ 24 июня 2019

Чтобы попросить перенаправить браузер пользователя, вам нужно отправить код JS, а при загрузке страницы вы должны вызвать код перенаправления, подобный этому

function redirectPost(url, data) {
    var form = document.createElement('form');
    document.body.appendChild(form);
    form.method = 'post';
    form.action = url;
    for (var name in data) {
        var input = document.createElement('input');
        input.type = 'hidden';
        input.name = name;
        input.value = data[name];
        form.appendChild(input);
    }
    form.submit();
}
// call on window load
 redirectPost('http://www.someserver.com', { post_token: '1234561234543322' });
0 голосов
/ 15 июня 2019

На самом деле вам нужно будет выполнить запрос на внешний сервер (например, используя Apache HttpClient или для простых случаев JSoup) и вернуть тело ответа исходному вызывающему.

Если вы хотите выполнить, например,войдите в систему от имени пользователя, вам также потребуется выполнить контролируемый захват сеанса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...