【发布时间】:2017-06-24 10:35:09
【问题描述】:
我目前正在编写一个按需发布 JWT 令牌的应用程序。 颁发令牌时,应将用户重定向到网页。这就像一个魅力 - 但我需要为该重定向设置一个授权标头。
用户在网页 A 上输入他的凭据。网页 A 向服务器 B 发送 POST 请求。服务器 B 检查凭据并提供令牌。现在用户应该被重定向到网页 C。
我尝试了以下方法:
@RequestMapping(value = "/token", method = RequestMethod.POST, produces = "application/json", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
public ResponseEntity<Object> token(
@RequestParam("user") String _username,
@RequestParam("secret") String _secret
) throws Exception
{
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
MultiValueMap<String, String> map = new LinkedMultiValueMap<String, String>();
map.add("user", _username);
map.add("secret", _secret);
HttpEntity<MultiValueMap<String, String>> entity = new HttpEntity<MultiValueMap<String, String>>(map, headers);
HttpStatus statusCode = HttpStatus.FOUND;
HttpHeaders httpHeaders = new HttpHeaders();
try {
ResponseEntity<String> request = restTemplate.exchange(_url, HttpMethod.POST, entity, String.class);
} catch (Exception ex) {
ex.printStackTrance();
}
String response = request.getBody();
JSONObject _tokenObject = new JSONObject(response);
String _token = _tokenObject.getString("access_token");
httpHeaders.add("Authorization", "Bearer: " + _token);
URI _redirectUri = new URI("http://foo.example.com/webpageC");
httpHeaders.setLocation(_redirectUri);
return new ResponseEntity<>(httpHeaders, HttpStatus.FOUND);
}
重定向有效,但只有/token 在重定向发生之前将授权标头作为响应标头。
如何实现标头发送到网页C?
谢谢。
更新
forward: 是不可能的,因为网页 C 在另一个 URL 上而不是在同一个控制器中。
任何人有一个想法如何解决?
【问题讨论】:
-
我不认为将标头传递给重定向是可能的重定向将在客户端发生。您可以做的是转发或使用 RestTemplate 使您的令牌方法充当webpageC的代理。
-
你能解释一下吗?或者提示一下如何实现?
-
发布了将近一年的帖子,但您找到解决方案了吗?
-
遗憾的是,我们不得不以另一种方式解决它..
-
@webmonkey 如果您能与社区分享您的方法,那就太好了。
标签: java spring redirect token jwt