Extjs 6 + Spring Rest:401 错误的空响应

Posted

技术标签:

【中文标题】Extjs 6 + Spring Rest:401 错误的空响应【英文标题】:Extjs 6 + Spring Rest : Empty response for 401 error 【发布时间】:2017-10-20 02:50:59 【问题描述】:

当我发出 CORS 请求并且服务器返回 401 代码作为响应时,我无法获得任何有价值的响应信息(状态 = 0,responseText 为空)。

在 extjs 方面,我使用带有重写方法的 rest 代理:

doRequest : function(request) 
  var me = this,
    requestConfig = request.getConfig();
  requestConfig.cors = true;
  requestConfig.useDefaultXhrHeader = false;
  Ext.Ajax.cors = true;
  Ext.Ajax.useDefaultXhrHeader = false;
  me.callParent([request]);

,

在浏览器(Chrome)中,我可以发现响应有 401 错误代码和一些标题。但是当我尝试使用以下代理方法处理响应时:

processResponse : function(success, operation, request, response) 
  var me = this;
  if (response.status == 401 || response.status == 403) 
    me.handleSecurityError(response);
   else 
    me.callParent([success, operation, request, response]);
  

,

我得到的只有success = false和空响应。

在后端我还有一个 spring 身份验证过滤器:当我在过滤器中抛出身份验证异常时,我得到空响应,但是当我从控制器返回 ResponseEntity 和任何代码时,我得到有价值的响应。

我必须做些什么才能获得至少一个错误代码?

【问题讨论】:

【参考方案1】:

你如何配置你的cors?

springSecurityFilterChain 很可能放在您的 cors 过滤器之前,因此不会调用 cors 过滤器。

@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class SimpleCorsFilter implements Filter

尝试放置 @Order(Ordered.HIGHEST_PRECEDENCE),以便在 springSecurityFilterChain 之前调用 cors 过滤器

【讨论】:

以上是关于Extjs 6 + Spring Rest:401 错误的空响应的主要内容,如果未能解决你的问题,请参考以下文章

使用spring security angular和rest API重新加载页面给我错误401

grails spring security rest status 401重定向到控制器的动作以抛出自定义错误消息

在 grails 应用程序中调用 spring security rest 插件登录时出现 401 未经授权的错误

webpack服务器中的rest API调用(来自角度)返回401

Spring Boot ClientHttpRequestInterceptor 重新发送 401

如何在 extjs 3.4 中为 ajax 调用处理 windows auth 握手(401)?