我想用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
作为参数吗?
答案 0 :(得分:1)
您可以使用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方法可能有所不同。
提示:您可以使用postman轻松模拟您的请求,从而为您生成OkHttp或Unirest请求代码。
答案 1 :(得分:0)
您实际上必须向外部服务器发出发布请求(例如,使用Apache HttpClient或在简单情况下使用JSoup),然后将响应正文返回给原始调用者。
如果您要代表用户执行某种登录操作,则还必须执行受控的会话劫持。
答案 2 :(得分:0)
要请求重定向用户的浏览器,您需要发送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' });