当我发出CORS请求并且服务器返回401代码作为响应时,我无法获得任何有价值的响应信息(status = 0,responseText为空)。
在extjs方面,我使用rest proxy和重写方法:
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]);
}
},
我只获得成功=假和空响应。
同样在后端,我有一个spring认证过滤器:当我在过滤器中抛出一个认证异常时,我得到空响应,但是当我从控制器返回任何代码的ResponseEntity时,我得到了有价值的响应。
我需要做些什么才能获得至少一个错误代码?
答案 0 :(得分:1)
你如何配置你的角色?
最有可能springSecurityFilterChain
放在你的角色过滤器之前,因此不会调用cors过滤器。
@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class SimpleCorsFilter implements Filter
尝试放置@Order(Ordered.HIGHEST_PRECEDENCE)
,以便在springSecurityFilterChain