栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringCloud商城day04 网关微服务和加密算法-2021-09-29

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringCloud商城day04 网关微服务和加密算法-2021-09-29

一. 网关微服务Gateway

1. 没有网关的问题:
   (1) 复杂性: 客户端多次请求不同微服务
   (2) 跨域请求
   (3) 每个微服务独立认证
   (4) 难以重构. 合并/拆分服务, 直接通信复杂

2. 作用: 授权 / 限流 / 登录 / log日志

3.优点:
  (1) 安全
  (2) 易监控
  (3) 统一认证授权
  (4) 减少客户端与微服务交互次数

4. 实现技术:
  (1) nginx(engine x)
  (2) netflix(zuul)
  (3) spring(gateway)

5. 前端请求 - 网关 - 微服务:
  (1) changgou_gateway_system: 依赖 gateway / eureka / hystrix

  (2) 启动类: @SpringBootApplication @EnableEurekaClient

  (3) applilcation.yml 配置类:  spring / cloud / gateway / routes / -id / - uri / - predicate:

  (4) uri: lb://goods: load balance动态路由协议 - 在eureka注册中心 - 找到 goods服务 - 找到服务的真正路径

  (5) predicates: -Path=/goods/**  ->  拦截的路径

  (6) filters: -StripPrefix=1  -> 取出请求路径的1个前缀(可以隐藏网关路径)

6. 网关跨域: changgou_gateway_system

  (1) yml配置类: globalcors / cors-configurations:

  (2) '[/**]':    -> 匹配所有请求

  (3) allowedOrigins: "*"     ->  跨域处理  允许所有域

  (4) allowedMethods: -GET/ -POST / -PUT / -DELETE   -> 支持的方法

7. 网关过滤器:
  (1) 逻辑处理: IP拦截 / URL拦截

  (2) implements GlobalFilter, Ordered: 

  (3) Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) : 过滤器的具体业务逻辑

  (4) int getOrder(): 过滤器执行顺序, int值越小优先级越高

二. 网关限流

1. 含义: 限制客户端对后端系统的访问流量.  所有请求都经过网关系统

2. 实现:

  (1) 令牌桶算法

  (2) 漏桶算法

  (3) 计数算法

3. 令牌桶算法: 

  (1) 实现: Guava / redis

  (2) 获得令牌才放行, 以一定速率生成令牌

4. 需求: 每个ip1秒内只能发送一次请求, 超过则请求返回429错误

  (1) 基于redis实现

  (2) gateway_system 依赖:  spring-boot-starter-data-redis-reactive

  (3) 启动类声明@Bean 接口 KeyResolver:  限制当前请求的访问ip

        重写resolve方法: Mono.just(exchange.getRequest().getRemoteAddress().getHostName();

  (4)  yml配置:
      redis:  host: 192.168.200.128

      goods: filters:  -name: RequestRateLimiter  -> 请求数额限流

       -args: key-resovler: "#{@ipKeyResolver}"  -> 引用启动类配置的bean ipKeyResovler

       redis-rate-limiter.replenishRate: 1  - > 令牌桶每秒填充速率

       redis-rate-limiter.burstCapacity: 1  -> 令牌桶总容量

  (5) 错误429: 被限流

三. BCrypt加密和验证

1.  密文不可逆:  密文没有直接api可以解密

2. 用户密码加密  - 保存密文到数据库 - 用户输入密码 - 加密得到密文 - 和数据库校验

3. MD5 / BCrypt: 加盐机制

4. 测试BCrypt: 

  (1) 获取随机盐: BCrypt.gensalt()

  (2) 加密盐+密码:  BCrypt.hashpw("password", gensalt)

  (3) 解密: BCrypt.checkpw("password", saltPassword) ->  先加密password, 然后和之前的密文saltPassword比较, 返回boolean值
5. 新增管理员的密码加密:

  (1)  tb_admin表: 

  (2) changgou_service_system / AdminServiceImpl实现类:  

    1) 获取盐: BCrypt.gensalt()

    2) 加密用户密码: BCrypt.hashpw(admin.getPassword(), gensalt);

    3) 存放密文: admin.getPassword(hashpw)

 6. 管理员登录密码验证: 

 (1) 需求: 用户发送请求 -> 输入用户名和密码 -> gateway-system微服务controller接收参数 -> 验证密码和用户名

  (2) AdminService接口: login(Admin admin)

  (3) AdminServiceImpl实现类:  

        adminMapper.selectOne(admin);  //获取数据库中管理员对象

        BCrypt.checkpw(admin.getPassword(), adminResult.getPassword());  // 校验密码

  (4) AdminController: @PostMapping("login")

四. 加密算法

五. JWT微服务鉴权

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/274989.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号