技术场景
单点登录这块怎么实现的?
先解释什么是单点登录?
单点登录的英文名是 Single Sign On,是指多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。
介绍单点登录的解决方案,以 JWT 为例
用户访问其他系统,会在网关判断token是否有效
如果token无效则会返回401,前端跳转到登陆页面
用户发送登录请求,返回浏览器一个token,浏览器把token保存到cookie
再去访问其他系统时都会携带token,由网关统一验证通过后路由到指定服务
权限认证是怎么实现的?
介绍RBAC权限模型的5张表的关系(用户,角色,权限)
权限框架:Spring security
上传数据的安全性你们是怎么控制的?
使用非对称加密(或对称加密),给前端一个公钥让它把数据进行加密后传给后台,后台负责解密处理数据。
文件很大建议使用对称加密,不过不能保存敏感信息。
文件较小,要求安全性高,建议采用非对称加密。
你们项目中日志怎么采集的?
我们搭建了ELK日志采集系统
介绍ELK的三个组件:
Elasticsearch是全文搜索分析引擎,可以对数据存储,搜索,分析
Logstash是一个数据收集引擎,可以动态收集数据,可以对数据进行过滤,分析,将数据存储到指定的位置
Kibana是一个数据分析和可视化平台,配合Elasticsearch对数据进行搜索,分析,图表化展示
查看日志的命令
目前查看日志的方式:按天保存到一个日志文件
实时监控日志
实时监控日志的变化:
tail -f xx.log
实时监控日志最后100行的变化:
tail -n 100 -f xx.log
按行号查询
查询尾部100行日志:
tail -n 100 xx.log
查询头部100行日志:
head -n 100 xx.log
查询行号区间的日志:
cat -n | tail -n +100 | head -n 100
按照关键词找日志的信息
查询日志文件中包含debug的日志行号:
cat -n xx.log | grep "debug"
按照日期查询
sed -n '/2022-01-01/,/2022-01-31/p' xx.log
日志太多,处理方式
分页查询日志信息:
cat -n xx.log | grep "debug" | more
筛选过滤后,输出到一个文件中:
cat -n xx.log | grep "debug" > debug.txt
生产问题怎么排查?
已经上线的bug排查的思路:
先分析日志,通常在业务中都会有日志的记录,或者查看系统日志,或者查看日志文件,然后定位问题
远程debug(通常公司的正式环境(生产环境)是不允许远程debug的。一般远程debug都是公司的测试环境,方便调试代码)