开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第6天,点击查看活动详情
前言
这几天公司要求整一个工业互联网的项目,要求每个子模块的token必须从根模块去取,确保数据的安全性,同时也方便单点登录,借此机会重新熟悉下公有模块token的取值。
多级域名
因为是多个模块,所以我们的项目存在多个小的子系统,那么就会有一个根域名的存在。
问:什么是多级域名
答:首先我们要知道什么是一级域名,比如我们常见的baidu.com,souhu.com....,这些都是一级域名,一级域名下可以存在子域名,说白了就是大佬的附属小弟。早几年很火的百度贴吧(tieba.baidu.com)就是baidu.com的附属小弟,所以跟人混一定要在后面加上大佬的名字。 这里注意www.baidu.com依然是小弟。他是百度的搜索业务。
cookie
一般情况下,cookie都是后端返回的,不存在前端的随意取值。
看下cookie的详细定义:
cookie是一段文本,格式key-value
1.当客户端第一次访问服务器端时,服务器会成cookie信息,并且在响应头的set-cookie里面把生成的cookie信息发送给客户端
2.当客户端第2-N次访问服务端的时候,那么客户端就会在请求头的cookie带上cookie信息,从而实现鉴权
/**
* 在后台设置浏览器cookie的值
* maxAge设置失效时间,单位是秒
*/
Cookie cookie = new Cookie("AAAAA", UUID.randomUUID().toString());
cookie.setMaxAge(30*60);
response.addCookie(cookie);
这样后台就会发送到浏览器一个cookie,我们就可以取值了。
注意: 我们在子域名进行cookie的取值时可以进行向上取值,但是不能进行向下的取值。 打个比方:就好像你去迪士尼一样,大门就是一级域名,只要你买了票就可以进出,但是里面的各种游玩项目就是二级域名,你要有对应得票才可以玩耍,你只有海洋馆得票那就进不了电影院的门,没办法就是这样的无可奈何,在数据上也是为了确保数据的安全,多级域名之间不能随意的去访问,更不能访问二级域名下的三级域名.
取值
前端的开发人员可以通过domain进行cookie的取值。
假设我们有一个一级域名: xiaoyangren.com
同时我们还有一个二级域名:aa.xiaoyangren.com
上代码:
前端的话我们要安装一个插件js-cookie,(js-cookie是一个简单的,轻量级的处理cookies的js API,用来处理cookie相关的插件)
安装:
npm install js-cookie --save
使用:
//配置生产环境地址 .env.production
# 生产环境域名domain
VUE_APP_DOMAIN='xiaoyangren.com'
//store文件存储
import Cookies from 'js-cookie'
const TokenKey = 'Token'
export function setToken(token) {
return Cookies.set(TokenKey, token, {
domain: process.env.VUE_APP_DOMAIN
})
}
OK,这样我们就可以从一级域名xiaoyangren.com去取得对需要的cookie。
结语:
这样我们就可以实现从一级域名中取值cookie来到子系统中使用,那么下次我们将回答如果子系统的有自己的登录,他又从一级域名登录到子系统,cookie之间会不会有什么冲突