1.常见的加密方式?

    1. 可逆加密
    2. 对称加密: 加密解密使用同一个密钥
    3. 优点:算法公开,性能好。速度快
    4. 缺点:没有非对称加密安全性好
    5. 场景:项目中参数加密
    6. 非对称加密:使用前 先生成私钥和公钥
    7. 如果用私钥加密 可以用公钥解密
    8. 如果用公钥加密 可以用私钥解密
    9. 优点:安全性好
    10. 缺点:性能差
    11. 场景:第三方调用,参数签名
    12. 不可逆加密:
    13. MD5 加密不可逆加密 每次加密密文相同 容易被破解
    14. MD5 + salt (随即成生成的混淆字符串)

    2.项目中是如何进行登录认证的?

    ● 前端所有的请求都需要经过网关路由到微服务,我们在网关准备了一个全局过滤器,用于登录认证基本流程如下 
      ○ 获取请求路径
      ○ 判断路径是否为白名单路径,如果是直接放行 
      ○ 如果不是,则检查请求头中是否携带token,如果没有token,直接终止请求并返回401
      ○ 如果携带token,会使用我们封装的jwt工具类,解析token是否有效,无效终止请求并返回401
      ○ 有效,会获取token中存储的用户信息,将用户id设置到header中路由给其他微服务
            具体实现:
            实现GlobalFilter 接口  实现filter(exchange,chain)
    ● 登录功能就是白名单路径,登录验证流程如下 
      ○ 接收前端传入的用户名和密码之后,我们会根据用户名先检查用户是否存在,
      ○ 如果存在该用户,则会获取加密后的密码和加密时用的盐,然后对用户输入的密码进行加盐加密处理,再比较密码是否正确,
      ○ 验证通过之后,我们会生成一个token返回给客户端
    

    3.什么是无状态登录?

    用户在登陆后,后端不维护用户的信息,只是颁发token凭证
    

    4.什么是JWT Token?

    JSON Web token是一个开放的行业标准,它定义了一种简洁的、自包含的协议格式,用于在通信双方
    传递json对象,传递的信息经过数字签名可以被验证和信任。
    
    主要由三部分:
    header:头信息  {"token类型":" ", "加密类型":"HS256"}
    payload:载荷信息 {"自定义的json数据"}
    signature: 签名信息 HS256(base64(头信息)+ "."+base64(载荷信息),密钥)
    

    5.如何保证token令牌不被篡改?

    通过签名:signature  用于防止jwt内容被篡改,这个部分使用base64url将前两部分进行编码,
    服务端接收到请求后以同样的算法得到签名,并跟当前的签名进行比对,如果不一样,说明参数被更改过,
    就会使篡改之后的令牌无效
    

    6.token令牌能否保证数据安全?

    token是一门认证技术,不是为了保证数据安全的
    token令牌的第二部分负载中,不建议存放敏感信息
    使用 token和https协议进行数据安全保证
    

    7.请介绍下用户实名认证模块的业务流程?

    业务描述:
      app用户 想要成为自媒体用户,需要先进行实名认证,实名认证需要提交:身份证正面照、反面照、
      活体检测照片,手持身份证照片提交到后台,运营人员可以在后台审核模块对信息及逆行审核
       审核通过: 为用户开通自媒体账户,并创建一个作者信息
    
       具体流程:
           1.根据实名认证id查询实名认证信息
        2.判断状态是否为  待审核 1
        3. 根据前端操作将审核状态修改为2 失败  或 9通过
        4.审核通过
          远程开通自媒体账户
          远程开通作者信息
    

    8.Feign的作用?

    实现微服务之间的http远程调用
        feign是一种声明式、模板化的HTTP客户端,主要作用是简化微服务之间的调用。
    在Spring Cloud中使用Feign, 我们可以做到使用HTTP请求远程服务时能与调用本地方法一样的编码体验,
    开发者完全感知不到这是远程方法,更感知不到这是个HTTP请求
    

    9.Hystrix的作用?

    ● Hystrix的本质作用是当系统资源过载(Over Load Control)时提供服务状态保护机制,包括下面四个方面
    ● 熔断:当失败率达到阈值时自动触发降级(如因网络故障或超时造成的失败率高),熔断器触发的快速失败会进行快速恢复
    ● 隔离(线程池隔离和信号量隔离):限制调用分布式服务的资源使用,某一个调用的服务出现问题不会影响其他调用
    ● 降级:超时降级、资源不足时(线程或信号量)降级,降级后可以配合降级接口返回托底数据,做到优雅降级
    ● 缓存:提供了请求缓存、请求合并的实现方法
    
    降级服务: 为微服务的调用,准备一个兜底策略,当调用失败时可以走兜底策略,不至于报异常
      比如:返回默认值、友好错误提示、备用方案等
    

    10.项目中Feign的具体使用?

    1.在项目中,我们把需要调用的微服务的feign抽取成一个模块 
    2.在模块中对需要调用的微服务创建feign远程接口 
    3. 然后在创建一个服务降级类,当远程调用失败时,返回设定的默认值 
    4.我们还设定了feign的日志等级 
    5. 然后通过自动装配开启feign功能,只要导入feign模块的依赖就可以使用feign的功能