AngularJS实现cookie跨域
前后端分离被越来越多的公司重视利用。然后带来的最棘手的问题就是。用户信息应怎样保存。
一、场景描写叙述
以Java为后台,AngluarJS做前端为例进行描写叙述:当用户在界面登录时。需把用户信息(如uid)存入后台JAVA系统中,用于前后端所处主域可能不同。全部採用常规的session进行保存已不能满足其业务场景。
解决方式:採用cookie进行存储,当cookie被禁止后採用浏览器本地存储localstorage。
採用cookie进行存储时,会出现跨域问题(即AngularJS訪问JAVA端,需携带信息存入到JAVA服务端cookie中)。
二、AngularJS实例
AngularJS:
<pre name="code" class="javascript">function getAdustryController($scope,$http){
$http.post('http://localhost/ajax/getAllIndustryCategoty.pt',{languageColumn:'name_eu'},{'withCredentials':true}).success(function(data){
$scope.industries = data;
});
}
JAVA:
public String execute(){
/* 要存入的cookie信息 */
Cookie cookie = new Cookie("test_test","321");
cookie.setMaxAge(3600);
response.addCookie(cookie); /* This is a part of security, you cannot do that. If you want to allow credentials then your Access-Control-Allow-Origin must not use *. You will have to specify the exact domain. */
response.setHeader("Access-Control-Allow-Origin", "http://test.domain.cn"); //请求源
response.setHeader("Access-Control-Allow-Methods","POST"); //请求方式POST, GET, OPTIONS
response.setHeader("Access-Control-Max-Age", "3600"); //有效期
response.setHeader("Access-Control-Allow-Headers", "Content-Type, *"); //请求头类型
response.setHeader("Access-Control-Allow-Credentials","true"); //是否支持cookie跨域 SiteHandlerAction SiteHandler = (SiteHandlerAction) BeansFactory.getBean(SiteHandlerAction.class);
List<IndustryCategory> list = SiteHandler.getAllIndustryCategory(); //全部的分类集合
JSONArray jsonArray = JSONArray.fromObject(list); //将list转为json
String json = jsonArray.toString(); //转为json字符串
//将字符串写进输出流
try {
PrintWriter write = response.getWriter();
write.print(json);
write.close();
} catch (IOException e) {
e.printStackTrace();
}
return NONE;
}
三、Jquery实例:
$.ajax("http://localhost/ajax/getAllIndustryCategoty.pt",{
type:"POST",
data:{languageColumn:'name_eu'},
xhrFields:{withCredentials: true},
crossDomain::true,
success:function(data, status, xhr){}
});
四、经常使用浏览器查看全部cookie信息方式
Google浏览器查看本机全部cookie信息:依次点击设置--高级选项--内容设置--cookies--选择“显示cookies和其它站点数据”button就能够看到了
firefox浏览器查看本机全部cookie信息:依次点击设置--选项--隐私--移除单个Cookie
五、header信息:
Access-Control-Allow-Origin: <origin> | * | 授权的源控制 |
Access-Control-Max-Age: <delta-seconds> | 授权的时间 |
Access-Control-Allow-Credentials: true | false | 控制是否开启与Ajax的Cookie提交方式 |
Access-Control-Allow-Methods: <method>[, <method>]* | 同意请求的HTTP Method |
Access-Control-Allow-Headers: <field-name>[, <field-name>]* | 控制哪些header能发送真正的请求 |
AngularJS实现cookie跨域的更多相关文章
- 解决cookie跨域访问
一.前言 随着项目模块越来越多,很多模块现在都是独立部署.模块之间的交流有时可能会通过cookie来完成.比如说门户和应用,分别部署在不同的机器或者web容器中,假如用户登陆之后会在浏览器客户端写入c ...
- cookie 跨域访问的解决方案
Cookie 同域单点登录 最近在做一个单点登录的系统整合项目,之前我们使用控件实现单点登录(以后可以介绍一下).但现在为了满足客户需求,在不使用控件情况下实现单点登录,先来介绍一下单点登录. ...
- asp.net关于Cookie跨域(域名)的问题
Cookie是一个伟大的发明,它允许Web开发者保留他们的用户的登录状态.但是当你的站点有一个以上的域名时就会出现问题了.在Cookie规范上 说,一个cookie只能用于一个域名,不能够发给其它的域 ...
- 基于Cookie跨域的单点登录问题
由于项目中,需要用的单点登录,主要的思路是:系统1:用户名密码-->写入Cookie-->其他系统读取Cookie. 1.在同一个服务器下的Cookie共享 @Component(&quo ...
- golang-在gin中cookie跨域设置(配合ajax)
1.当我在golang中,在前后端分离的情况下使用cookies时发现,跨域没有被允许.代码如下: func AccessJsMiddleware() gin.HandlerFunc { return ...
- nginx处理cookie跨域
今天在部署公司项目的时候碰到一个问题 项目地址是xxx.xx.xx.122:7480 项目A后台请求地址为xxx.xx.xx.123:8080/data-sso 开始nginx配置是 server { ...
- 解决前后端分离后的Cookie跨域问题
一. 前端Ajax关键配置 $.ajax({ type: "post", url: xxx, data: xxx, contentType: 'application/json', ...
- cookie 跨域解决方法
1.Nginx 正向和反向代理的区别 正向代理和反向代理的区别:正向代理隐藏真实客户端,反向代理隐藏真实服务端,图示: 2.cookie跨域问题 因为cookie存在跨域问题,其中一个解决方法是,设置 ...
- Iframe和Frame中实现cookie跨域的方法(转载)
在Iframe和Frame中默认是不支持Cookie跨域的,但通过设置P3P协议相关的响应头可以解决这一问题.关于p3p协议: P3P: Platform for Privacy Preference ...
随机推荐
- django admin显示多对多字段
参考文档https://jingyan.baidu.com/article/4e5b3e190f55c591901e24b3.html admin.py from .models import *cl ...
- NOIP2017 小凯的疑惑 解题报告(赛瓦维斯特定理)
题目描述 小凯手中有两种面值的金币,两种面值均为正整数且彼此互素.每种金币小凯都有 无数个.在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付的.现在小 凯想知道在无法准确支付的物品中,最贵的 ...
- 19.允许重复的unordered_map
#include <string> #include <iostream> //查询性能最高 //允许重复的,hash_map #include <unordered_m ...
- jsLittle源码封装对象合并
JSLi.extend = JSLi.fn.extend = function () { var options, name, src, copy, target = arguments[0],i = ...
- NSStream 流式思想
流式思想的本质是将数据或信号看作流.流的管理者NSStream看作管道. 内容包含两方面: 1.流的建立:源.目的地: 2.流的管理:状态事件与数据事件. 本质上是建立联系.处理数据.处理状态.
- JavaScript获取本机IP地址
<script type="text/javascript"> /** * Get the user IP throught the webkitRTCPeerConn ...
- 将double数据保留两位小数
private double formatDouble(double number) { DecimalFormat df = new DecimalFormat("#.00"); ...
- DedeCMS筛选简单实现方法不改后台源文件
笔者在前面几篇文章中提到的dedecms筛选的实现方法,对新手来说实现过程较复杂.接下来分享一个最简单的实现在移动端上筛选功能. 最近在筹备移动端企业站,实现功能有:实现一个管理后台管理PC端和移动端 ...
- NodeJS学习笔记 进阶 (7)express+session实现简易身份认证(ok)
个人总结: 这篇文章讲解了express框架中如何使用session,主要用了express-session这个包.更多可以参考npm.js来看,读完这篇文章需要10分钟. 摘选自网络: 文档概览 本 ...
- 洛谷3961 [TJOI2013]黄金矿工
题目描述 小A最近迷上了在上课时玩<黄金矿工>这款游戏.为了避免被老师发现,他必须小心翼翼,因此他总是输.在输掉自己所有的金币后,他向你求助.每个黄金可以看做一个点(没有体积).现在给出你 ...