我目前正在编写一个按需发布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
在重定向发生之前获得Authorization Header作为Response Header。
我怎样才能实现将标题发送到网页C?
谢谢。
- 更新**
forward:
是不可能的,因为网页C在另一个URL上,并且不在同一个控制器中。
有人知道怎么解吗?
1条答案
按热度按时间fafcakar1#
通常,我们让前端开发人员处理重定向。如果您在后端工作,您可以提供一个restful API来发布JwtToken。前端将考虑如何在以下重定向的Http请求中携带Authorization头。下面是一个简单的登录控制器,使用
mobile
和password
交换JwtToken。作为后端,如果您希望无论如何都要处理重定向,请将请求重定向到将令牌作为参数的网页,在本例中:
相关的后端代码为:
同样,让前端将令牌作为授权头放入下一个请求中。
请记住,您返回响应是为了设置响应头,而不是为前端设置下一个请求的请求头。
参考:https://www.callicoder.com/spring-boot-security-oauth2-social-login-part-2/