changgou-day08

  • 目标
    • 网关系统搭建
    • 路由的配置
    • 跨域的介绍
    • 扩展(域名访问系统的原理)
    • 搭建用户微服务
    • 实现登录(解决方案:jwt)
    • jwt的使用

      1网关

      1. 网关就是一个微服务。用于统一解决 端口的额问题,跨域的问题,安全的问题,限流等问题。

      2 搭建网关

      1. 1.创建工程 添加依赖 spring cloud gateway依赖
      2. 2.配置yml
      3. 3.启动类

      3 跨域

      ``` 哪些场景是属于跨域: 不同的系统进行AJAX的请求的时候属于跨域的,跨域的请求浏览器一般是不被允许的。 1.www.jd.com——>www.taobao.com 跨域 2.localhost:8001 —->localhost:8002 跨域 3.www.jd.com:80—->www.jd.com:81 跨域 4.https —-> http 跨域。 域名相同,端口相同,协议相同 就不是跨域。 解决跨域的问题的解决方案:
  • CORS的协议 (高版本的浏览器至少 IE10 google)
    • 在服务端进行注解配置(相当配置了CORS的配置项)springmvc的注解 @CrossOrigin
    • 通过在网关(spring cloud gateway)进行统一的配置
    • 通过在网关(nginx里面进行配置CORS)
  • JSONP的方式(了解) 利用JS的漏洞的实现跨域,而且只支持GET请求 不支持其他的请求。
    1. <a name="hscvM"></a>
    2. ### 4.路由配置
    1.路由 转发的规则 2.断言 转发请求的条件 3.过滤 转发请求额外处理
    1. <a name="RjeO8"></a>
    2. #### 4.1 host配置
    3. ![1609552618860.png](https://cdn.nlark.com/yuque/0/2021/png/12589476/1635910688095-0d845f84-5f46-42ed-aba5-0785aecb7c48.png#clientId=uf93059d0-142d-4&from=drop&id=u7a504147&margin=%5Bobject%20Object%5D&name=1609552618860.png&originHeight=724&originWidth=1698&originalType=binary&ratio=1&size=92503&status=done&style=none&taskId=u15ddfbf5-be13-4c0a-bb23-12aeff53c36)
    4. <a name="qGZrq"></a>
    5. ### 5 用户直接登录(不会直接使用)
    输入用户名和密码发送请求给用户微服务 用户微服务接收到信息之后,从数据库查询数据 然后匹配 如果匹配成功登录成功。 返回登录成功即可 请求:/user/login GET/post 参数:username,password 返回值:result /true/false
    1. <a name="S9m4F"></a>
    2. ### 6 用户登录的解决方案
    3. ![](https://cdn.nlark.com/yuque/0/2021/png/12589476/1635910459641-3bede1bf-20e3-4b09-ae1e-5c0dcf99c3dc.png#id=DsgV3&originHeight=924&originWidth=1682&originalType=binary&ratio=1&status=done&style=none)
    4. <a name="vB7Q2"></a>
    5. ### 7 jwt
    jwt 是一个JSON格式的字符串,用于存储相关的令牌数据,实现登录的功能。能在微服务直接进行传递.==》令牌机制。
    1. 组成部分:<br />jwt由三部分来组成:<br /> header 头<br /> 描述了基本的信息 json数据--》经过base6编码之后得到一个字符串:比如:
    eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
    1. payload 载荷<br /> JSON的数据--》通过base64进行编码得出一个字符串:比如:
    eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9
    1. signature 签名:<br />由 header经过base64 加密后的数据+payload 经过base64加密的+ 秘钥, 通过头部定义的加密算法 得出一个字符串,该字符串就是签名。
    TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
    1. 最终jwt的最终的形式:三个部分通过"点"来链接。
    eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ ```