我正在使用Extjs-6和Spring 4开发一个应用程序。我的应用程序是Restful的。
我按照以下方式启用了CORS Origin:
public class CorsFilter extends OncePerRequestFilter {
private static final String ORIGIN = "Origin";
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
response.addHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Credentials", "true");
response.addHeader("Access-Control-Max-Age", "10");
String reqHead = request.getHeader("Access-Control-Request-Headers");
if (!StringUtils.isEmpty(reqHead)) {
response.addHeader("Access-Control-Allow-Headers", reqHead);
}
if (request.getMethod().equals("OPTIONS")) {
try {
response.getWriter().print("OK");
response.getWriter().flush();
} catch (IOException e) {
e.printStackTrace();
}
} else{
filterChain.doFilter(request, response);
}
}
}
过滤器配置:
<security:http use-expressions="true">
...
<sec:custom-filter ref="CorsFilter" before="HEADERS_FILTER"/>
</security:http>
和豆子:
<bean id="CorsFilter" class="..." />
我希望用户能够使用AJAX请求进行登录。我使用高级REST客户端和HTTP请求器测试AJAX请求。扩展程序的结果如下:
Ext Ajax请求的代码如下:
Ext.Ajax.request({
url: "http://localhost/Calk/j_spring_security_check",
// params: {
// "j_username": "ali",
// "j_password": "123456"
// },
params: "j_username=ali&j_password=123456",
headers: {
"Content-Type": "application/x-www-form-urlencoded"
},
method: "POST",
success: function(){...},
failure: function(){...}
});
当我发送请求时,它会收到“200 OK”响应,并在客户端初始化应用程序,发送一些请求以获取数据。但是,对于所有这些请求,服务器都会收到“401 Unauthorized”响应。
问题出在哪里?
重要更新:
登录请求如下:
服务器在响应中设置cookie,获取授权数据的请求如下::
为什么?
params: form.getValues()
吗? - qmateub/Calk/
路径,你的带有 ajax 的页面是否位于此路径下?检查你的 ajax 调用,查看第一次响应头中设置了哪个 cookie,以及它是否在第二个请求头中被发送回来。 - serglocalhost/Calk
,应用程序:localhost:8084/Calk
。 - Morteza Malvandi