Ajax中的Cors符合302重定向

时间:2018-07-31 03:28:28

标签: redirect cross-domain axios

我有一个带有8081端口的前端服务器 具有端口8080(Spring MVC + shiro)的后台服务器

当我向8080发送请求时,我必须在8080上设置cors标头

如果该请求是仅返回一些json数据的简单请求,则该请求有效

但是当响应状态为302时,Chrome显示

  

从“ http://localhost:8080/”重定向到“ http://localhost:8080/”具有   被CORS策略阻止:没有“ Access-Control-Allow-Origin”标头   存在于请求的资源上。

我认为发生此问题有两个原因:

①如果我拦截了此302状态并处理了response.headers.Location, 我将解决这个问题。但是我无法(使用axios)拦截此响应

②也许8080服务器的某些设置有误,当302发生时,服务器尚未设置该页面的cors标头。但是我不了解后端代码。

那么,①可行吗?还是需要更改8080服务器上的设置?

1 个答案:

答案 0 :(得分:0)

CORS跨域将事先向OPTIONS发送一个请求,此请求不附加令牌,这导致shiro拦截请求,确定当前用户未登录,引起问题,解决方法是继承FormAuthenticationFilter。

@Override
protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) {
  boolean allowed = super.isAccessAllowed(request, response, mappedValue);
  if (!allowed) {
    String method = WebUtils.toHttp(request).getMethod();
    if (StringUtils.equalsIgnoreCase("OPTIONS", method)) {
      return true;
    }
  }
  return allowed;
}