我有一个带有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服务器上的设置?
答案 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;
}