1.登录的方式
①有状态
服务端需要记录每次会话的客户端信息 从而识别客户端身份 根据用户身份进行请求的处理,典型的设计如tomcat中session
缺点: 服务端保存大量数据 增加服务端压力
服务端保存用户状态 无法进行水平扩展
客户端请求依赖服务端 多次请求必须访问同一台服务器
好处: 操作简单
②无状态
微服务集群中的每个服务 对外提供的都是rest风格的接口 而rest风格的一个最重要的规范就是: 服务的无状态性
服务端不保存任何客户端请求者信息
客户端的每个请求必须具备描述信息 通过这些信息识别客户端身份
好处: 客户端请求不依赖服务端的信息 任何多次请求不需要必须访问到同一个服务
服务端的集群和状态对客户端透明
服务端可以任意的迁移和伸缩
减少服务端存储压力
所以一般就使用无状态登录
无状态流程
一般都是通过jwt+rsa加密技术来实现无状态登录,首先创建一个校验微服务来进行校验,验证用户名和密码的话需要通过fegin组件来调用用户微服务来进行查询。使用jwt+rsa加密生成一个token返回给前台,写到cookie中
网关登录控制
获取用户的登录凭证jwt 如果校验成功就可以访问微服务
在这里是通过白名单的方式将一些不需要登陆就可以访问的微服务
白名单的执行流程(不需要登录就可以访问)
1.在application.yml中配置上不去拦截服务
filter:
allowPaths:
- /api/auth/login
- /api/search
- /api/user/register
- /api/user/check
- /api/user/code
- /api/item
2.定义一个配置类
通过 @ConfigurationProperties(“ly.filter”)来将allowPaths进行初始化
3.定义一个拦截器
①让它来继承zuulFilter,并重新它的方法
②里面有两个重要的方法 isAllowPath和run
分别代表的是当前用户请求的地址,是否在白名单中和过滤的逻辑
使用登录接口来将私钥存入到cookie
登录验证整个流程图