【问题标题】:Cors in Ajax Meet 302 RedirectAjax 中的 Cors 满足 302 重定向
【发布时间】:2018-07-31 03:28:28
【问题描述】:

我有一个 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 Headers。但是后台代码看不懂。

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

【问题讨论】:

标签: redirect cross-domain axios


【解决方案1】:

CORS跨域会提前向OPTIONS发送一个请求,这个请求没有附加token,这样会导致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;
}

【讨论】:

    猜你喜欢
    • 2021-12-22
    • 2021-01-05
    • 2016-09-25
    • 2023-02-22
    • 2012-06-25
    • 1970-01-01
    • 1970-01-01
    • 2015-11-26
    • 2013-09-03
    相关资源
    最近更新 更多