我在Spring控制器中有一个AJAX调用到我的端点。从POST验证信息后,我的控制器将做出重定向决定,是将请求转发到下一个位置,还是将其发送回登录页面。对帖子的回复是正确的,它是302,其中Location
标头设置正确。但是,当页面进行重定向调用时,它将对URL进行OPTIONS调用,然后对GET进行调用,后者仅返回HTML。太好了,我有HTML,但是页面停留在我的JSP页面上,并且从不访问外部URL。我该如何处理?
示例Java代码:
@RequestMapping(value = "/token/{token_code}", method = {RequestMethod.GET})
public void validateToken(HttpServletRequest servletRequest, HttpServletResponse servletResponse, @PathVariable String token_code) {
//set some servlet request attributes from incoming packet info
if(isTokenValid(token_code)) {
servletRequest.getRequestDispatcher(MyConstants.JSP_DEVICE_INFO).forward(servletRequest, servletResponse);
}
else {
servletRequest.getRequestDispatcher(MyConstants.FAILURE_URL).forward(servletRequest, servletResponse);
}
}
@RequestMapping(value = "/token/tokenRedirect", method = {RequestMethod.POST},headers = "content-type=application/json",consumes = {MediaType.APPLICATION_JSON_VALUE})
public ModelAndView getSession(HttpServletRequest servletRequest,
HttpServletResponse servletResponse,
@RequestBody TokenValidateRequest request)
{
boolean isValid = verifyCollectedInfo(request);
if(isValid) {
servletResponse.setHeader("Location", request.url());
servletResponse.setStatus(302);
}
else {
servletResponse.setHeader("Location", MyConstants.FAILURE_URL);
servletResponse.setStatus(302);
}
}
JSP Ajax调用:
$.ajax({
headers: {
'accept': 'application/json',
'content-type': 'application/json'
},
type: "POST",
url: "tokenRedirect",
context:document.body,
contentType:"application/json",
data:JSON.stringify(TokenValidateObject)
});
因此,当我检查网络流量时,我看到响应的状态设置为302,并且Location标头具有我想要的URL,但是它只是获取重定向URL的HTML,实际上并没有切换视图< / p>
答案 0 :(得分:1)
您应该尝试使用前端而不是后端进行重定向。 Ajax旨在发出一个异步请求,然后可以在前端使用它。
因此,与其在后端进行重定向,不如告诉print
重定向位置,并使用前端返回的数据进行重定向。
$.ajax({
headers: {
'accept': 'application/json',
'content-type': 'application/json'
},
type: "POST",
url: "tokenRedirect",
context:document.body,
contentType:"application/json",
data:JSON.stringify(TokenValidateObject)
success: function(locationToRedirect){
window.location = locationToRedirect
}
});
答案 1 :(得分:0)
由于您使用的是XHR,因此客户端代码需要读取HTTP响应并使用JavaScript处理重定向。浏览器将仅执行PAGE重定向,而不执行XHR调用。
请参阅:Redirecting after Ajax post