技术场景

单点登录这块怎么实现的?

  1. 先解释什么是单点登录?

    • 单点登录的英文名是 Single Sign On,是指多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

  2. 介绍单点登录的解决方案,以 JWT 为例

    • 用户访问其他系统,会在网关判断token是否有效

    • 如果token无效则会返回401,前端跳转到登陆页面

    • 用户发送登录请求,返回浏览器一个token,浏览器把token保存到cookie

    • 再去访问其他系统时都会携带token,由网关统一验证通过后路由到指定服务

权限认证是怎么实现的?

介绍RBAC权限模型的5张表的关系(用户,角色,权限)

权限框架:Spring security

上传数据的安全性你们是怎么控制的?

使用非对称加密(或对称加密),给前端一个公钥让它把数据进行加密后传给后台,后台负责解密处理数据。

  • 文件很大建议使用对称加密,不过不能保存敏感信息。

  • 文件较小,要求安全性高,建议采用非对称加密。

你们项目中日志怎么采集的?

我们搭建了ELK日志采集系统

介绍ELK的三个组件:

Elasticsearch是全文搜索分析引擎,可以对数据存储,搜索,分析

Logstash是一个数据收集引擎,可以动态收集数据,可以对数据进行过滤,分析,将数据存储到指定的位置

Kibana是一个数据分析和可视化平台,配合Elasticsearch对数据进行搜索,分析,图表化展示

查看日志的命令

目前查看日志的方式:按天保存到一个日志文件

  • 实时监控日志

    1. 实时监控日志的变化:tail -f xx.log

    2. 实时监控日志最后100行的变化:tail -n 100 -f xx.log

  • 按行号查询

    1. 查询尾部100行日志:tail -n 100 xx.log

    2. 查询头部100行日志:head -n 100 xx.log

    3. 查询行号区间的日志:cat -n | tail -n +100 | head -n 100

  • 按照关键词找日志的信息

    1. 查询日志文件中包含debug的日志行号:cat -n xx.log | grep "debug"

  • 按照日期查询

    1. sed -n '/2022-01-01/,/2022-01-31/p' xx.log

  • 日志太多,处理方式

    1. 分页查询日志信息:cat -n xx.log | grep "debug" | more

    2. 筛选过滤后,输出到一个文件中:cat -n xx.log | grep "debug" > debug.txt

生产问题怎么排查?

已经上线的bug排查的思路:

  • 先分析日志,通常在业务中都会有日志的记录,或者查看系统日志,或者查看日志文件,然后定位问题

  • 远程debug(通常公司的正式环境(生产环境)是不允许远程debug的。一般远程debug都是公司的测试环境,方便调试代码)