我正在开发基于客户端的AngularJS和服务器端的Java的Java(用于WS的Tomcat + Jersey)应用程序。
我的API的某些路径受到限制,如果用户没有会话,则返回的响应状态为401.在客户端,会拦截401 http状态以将用户重定向到登录页面。
一旦用户被认证,我在服务器端创建一个会话
httpRequest.getSession(真);
并且发送给客户端的响应在其头部中具有Set-cookie指令:
设置Cookie:JSESSIONID = XXXXXXXXXXXXXXXXXXXXX; 域本地主机=; 路径= / API /; 仅Http
问题是cookie不会放在客户端。当我检查cookie为localhost域时,它是空的,所以下一个请求的头中没有这个cookie,客户端仍然无法访问我的API的受限路径。
客户端和服务器位于相同的域中,但它们没有相同的路径和相同的端口号:
客户: http://localhost:8000/app/index.html
服务器: http://localhost:8080/api/restricted/
附加信息:在两侧启用CORS:
“Access-Control-Allow-Methods”,“GET,POST,OPTIONS”
“Access-Control-Allow-Origin”,“*”
“Access-Control-Allow-Credentials”,true
这是一个AngularJS相关的问题?
发布于 2018-04-18 12:53:28
似乎"Access-Control-Allow-Credentials" : true
没有在客户端设置。指令$httpProvider.defaults.withCredentials = true
被忽略。
用配置参数中的{withCredentials:true}通过简单的$ http调用来替换$ resource调用。
发布于 2018-04-18 14:34:36
假设你已经解决了初始问题,只能通过向Access-Control-Allow-Origin添加特定域并删除通配符才能解决问题,接下来的步骤是:
Set-Cookie
文件中移除仅限HTTP的文件,否则将永远无法收到由angular.domain.com
而不是ws.domain.com
b)那么需要拨打cookie中指定的域名,否则Chrome将不会存储cookie
https://stackoverflow.com/questions/-100008162
复制相似问题