day01
1、简单介绍下你做的物流项目。
我最近做过的一个项目是物流类的项目叫做xxxx 是公司自研的(是外包到XXX公司做的)一个项目, 是基于springCloud微服务架构体系, 核心功能是揽件成功后通过智能调度快递员、智能管控车辆、线路规划等核心业务, 可以大幅度提升人效及管控效率, 节省运输成本。
项目产品主要有4个端:
用户端:基于微信⼩程序开发,外部客户使用,可以寄件、查询物流信息等。
快递员端:基于安卓开发的手机APP,公司内部的快递员使用,可以接收取派件任务等。
司机端:基于安卓开发的手机APP,公司内部的司机使用,可以接收运输任务、上报位置信息等。
后台系统管理:PC端,公司内部管理员用户使用,可以进行基础数据维护、订单管理、运单管理等
2、在项目中,你们git是怎么使用的?怎么进行持续集成的?提交git后如何自动进行构建?
我们项目中是使用Gogs对项目代码进行管理的。基于master打分支,基于分支进行发布,不允许在master分支上开发,开发阶段使用dev分支,有新任务时在deve分支上打出自己的分支,命名方式以Feature开头,完成后提交并合并到dev分支上,上线时由一个同事统一合并到master上。
使用Jenkins做持续集成。
提交git后进入jenkins页面,点击任务的执行构建按钮自动构建,方便测试人员进行测试
3、聊聊你们项目中的权限管家,它有什么用?为什么要这么做?
我们项目中的权限管家,是一个集中的权限管理平台,该系统管理着公司内部的员工信息以及权限,它是基于RBAC(Role Based Access Control)权限管理模型设计的,通过设置角色来设置相应的权限。公司之所以开发一个这样的权限平台,主要是方便多个系统之间的可以共用这一套服务,避免重复开发用户权限功能。
4、你负责了哪个端的登录业务的开发?具体聊聊是怎么做的。
此问题不要只说登录,可以把登录后对token的管理也描述一下
比如:在四个端都有登录,快递员端、司机端、后台系统管理都是内部员工的登录,我们公司有一个权限中台,具体登录的业务是通过远程调用中台实现的,登录后返回token,以后携带token访问,在网关统一检验和解析token,获取到userId后放到请求头中再路由到微服务,微服务写了一个拦截器统一获取userId放到ThreadLocal中,以后在controller或Service需要使用就从ThreadLocal中获取。
用户端没的登录有用权限中台,就是用微信的登录流程实现的,而用户端的token使用的是双token方式
day02
1、有对接过微信小程序登录吗?说说集成的流程?
有的。我在物流项目中实现了用户端的登录,整体就是使用Hutool工具提供的HttpRequest类实现了远程调用微信小程序的相关接口
具体流程是前端获取登录code,将code传递到后端,后端再请求微信服务端,就可以获取到openid等信息,再根据openid判断是否有用户,如果有就生成Token返回,如果没有用户新增用户并生成token返回,其中还调用了获取了用户真实的手机号的api。
2、微信接口中的access_token你们有没有设置有效期?有效期时间是多少?
用户端用了双token的方式,access_token是5分钟,refresh_token是24小时
3、在项目中,用户登录成功后的token你们是怎么生成的?有效期是多久?有考虑过双token模式吗?谈谈你的想法。
在我们项目中,用户登录成功后,我们是使用jwt生成token的,其中加密方式使用的是RSA非对称加密,并且我们用的是双token三验证的模式,会同时生成一对长短token,分别是access_token、refresh_token,时间分别是5分钟和24小时,当access_token失效后,前端会通过refresh_token进行刷新动作,会重新获取到一对长短token,依次往复。
4、如何让token提前失效?
jwt生成的token是无状态的,无法进行提前失效,如果需要提前失效的话,就需要将token转化成有状态的,方法有很多,比如可以将token存入到redis中,并且设定有效期时间,需要提前将token失效的话,直接将redis中的数据删除即可。
5、说说统一网关中是如何进行认证与鉴权工作的?在网关中如何自定义过滤器?
我们在网关中进行认证和鉴权工作,主要是校验请求头中的token是否有效以及请求用户是否具备允许访问的角色,通过角色来校验是否有权限。网关中自定义过滤器,主要是通过编写AbstractGatewayFilterFactory子类实现,
其匹配规则是ManagerToken --> ManagerTokenGatewayFilterFactory。
6、项目中的用户权限是如何管理的?如何与权限管家对接?
我们项目中的权限是通过对接公司内部的权限管理平台来实现的,我们是通过它提供的SDK和API进行对接的,就可以通过SDK中提供的类进行登录、查询角色等操作。