1.常见的加密方式?

  1. 可逆的加密方式:加密之后可以进行反向解密
  2. 对称加密:加密解密使用同一个密钥
  3. 优点:算法公开、性能好、速度快
  4. 缺点:没有非对称加密安全性好
  5. 场景:项目中的参数加密可以使用
  6. 非对称加密:使用前 先生成私钥和公钥,如果使用私钥加密,可以使用公钥进行解密
  7. 如果使用公钥加密,可以使用私钥进行解密
  8. 优点:两把钥匙,安全性要好一些
  9. 缺点:性能差
  10. 场景:第三方调用,参数签名,防止参数被篡改,保证参数安全
  11. 不可逆的加密方式:
  12. MD5加密:加密后不可解密(但是一些简单的密码还是可以被破解的)
  13. 所以项目中我们一般使用:MD5+salt(加盐:随机生成的混淆字符串)

2.什么是无状态登录?

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

3.什么是JWT Token?

JWT Token叫做:JSON Web token(格式以JSON为主)
主要有三部分:
header:头信息       {"token类型":"","加密方式":""}
payload:载荷信息(主要存储数据的地方)      {"自定义的json数据"}
signature:签名信息 【(对头信息进行base64的编码处理+“.”+载荷信息的base64的编码处理),然后利用头信息里面的加密方式,把两段内容进行一个加密】

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

通过签名:signature进行保证

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

token是一门认证技术,不是为了保证数据安全的

token中尽量不要存储敏感信息

token + https

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

前端所有的请求都需要经过网关路由到微服务,我们在网关准备了一个全局过滤器,用于登录认证
  网关过滤器的基本流程:
     1.获取请求的路径
     2.判断路径是否为白名单路径
          如果是白名单路径直接放行请求(比如:/login/in)
     3.如果不是白名单路径的话,检查用户请求头中是否携带token
          如果没有token,直接终止请求返回401未认证
     4.如果携带了token,使用JWT工具类,解析token,判断是否有效
          如果无效,直接终止请求返回401未登录成功
          如果有效,获取token中存储的用户信息,将用户id设置到header中路由给其他微服务
  网关具体实现:
       实现 GlobalFilter接口 再里面 实现filter方法,方法里面有两个参数:exchange,chain

如果用户没登录,经过网关过滤器拦截,返回401未认证通过状态,前端会跳转到登录页面,在登录页面输入 用户名和密码完成登录
     登录的基本流程
           1.根据用户名查询用户
      2.判断用户的状态是否正常
      3.对比输入的密码和用户的密码是否一致(MD5 + salt)
      4.颁发token  使用的是JWT工具类中的.getToken(id)

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

业务描述:
    app用户 要想成为自媒体用户,需要先进行实名认证,实名认证需要提交:身份证正面照片、反面照片、活体检测照片、手持身份证照片提交到后台,运营人员可以在后台用户审核模块中对该信息进行审核。审核通过:为该用户开通自媒体账户,并创建一个作者信息。
涉及的库表:
    leadnews-user app用户库:ap_user app用户表    ap_user_realname 实名认证表
  leadnews-wemedia 自媒体库:  wm_user 自媒体用户表
  leadnews-article 文章库:  ap_author  作者信息表

具体流程:
    1.根据实名认证id查询实名认证信息
  2.判断状态是否为  待审核
  3.根据前端操作将审核状态修改为 2(失败)或9(通过)
  4.如果是审核通过
          远程开通自媒体账户
      远程开通作者信息

8.Feign的作用?

实现微服务之间的http调用

9.Hystrix的作用?

服务降级:为微服务的调用,准备一个兜底的策略。如果调用失败,可以走兜底策略,不至于报异常

        再兜底的策略里服务降级可以返回:一个默认值、友好的错误提示、备用的方案等

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

Feign的工程搭建:
    1.引入依赖
              <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
              </dependency>
   2.在配置类中开启Feign的扫描注解:@EnableFeignClients(basePackages = "com.heima.feigns")
                                                                                                                       扫描的包就是Feign接口所在的包
   3.然后想调哪个微服务就为哪个微服务创建一个接口,接口上写上注解
                   @FeignClient(value = "leadnews-article",
            fallbackFactory = ArticleFeignFallback.class,
            configuration = HeimaFeignAutoConfiguration.class)