首页 > 其他分享 >启动环境+拉取项目+网关过滤器逻辑

启动环境+拉取项目+网关过滤器逻辑

时间:2023-06-11 17:46:15浏览次数:34  
标签:令牌 角色 网关 校验 拉取 过滤器 权限

服务器与服务器传输,当前在一台服务器,所有直接找到jenkens,cp拷贝即可,;若是不同的服务器,要用scp

image-20230610094412775

  • 配置源码:仓库,触发器:什么时候构建,构建环境:前端后端

  • 构建后端环境时,需要传参

image-20230610100430494

启动项目,可以不用进入jenkens

image-20230610105250651

  • RBAC 权限控制

    • 用户关联角色,角色关联用户

      image-20230610110742862
    • ​ 权限管理系统是给公司使用,公司中有很多应用A,B,C,D

    • 这些应用都可以在这里进行管理,但是都是属于这个公司

    • 这个组织股那里是被这些应用所共享

      组织结构对应某一家公司

    • 一级组织结构分区,二级组织架构

  • 权限管理

    • 先添加应用

权限管家系统的功能

首先,公司的子系统都会有的功能:认证(账号+密码,即用户登录)+鉴权(控制用户能做什么 )

权限管家即 把这些公共代码抽取出来,系统要进行校验,则通过权限管家进行校验,怎么区分不同系统?

通过应用管理,每一个应用都有不同的应用id,id和数据绑定

我们系统访问权限管家,校验过后,它返回数据:成功或者失败,是否有令牌

过程 : 系统携带用户名和密码给权限管家,它校验过后,会返回以个令牌,系统拿到令牌后返回给前端,进行校验,如果校验成功,则可以访问


权限管家在idea的使用

  • 首先导入依赖,它是黑马开源项目,导入com.itheima.em.auth依赖
  • 配置locla.yml文件,
  • image-20230611152912767

看是怎么具体使用的

  • 如果我们要实现登录,无需自己再写登录,直接调用api即可

  • 通过权限管家系统,可以进行用户信息,角色的增删改查,

  • 接着和神领物流系统进行对接,怎么对接?

  • 通过SDK,即我们封装的模板对象API,获得对象authTemplate。

  • 直接注入authTemplate,使用@Resourse

  • 它里面提供各种方法:做登录,鉴权,查询用户角色,查询用户具备的菜单

  • 但是前提是,必须首先登录,具备令牌之后才能访问


在网关中进行鉴权

认证和鉴权操作依赖权限管家,拿登录做例子,客户端拿到令牌,登陆成功之后,用户可以访问系统,但是每次访问要校验令牌,这里,用到拦截器或者过滤器,考虑到微服务,我们使用网关进行JWT令牌的校验

**

公钥私钥

  • 令牌加密算法分为对称(SH256,加密和解析校验一样,只要是相同字符串即可)和非对称(公钥私钥,世界范围内只有一对)
  • 权限管家生成的token令牌是基于私钥,但是在权限管家中配置了公钥和私钥,因为它也有校验令牌的需要,比如查询角色。。。。。
  • 网关对令牌进行校验解析的时候,必须使用公钥进行校验

看具体怎么使用

之前使用的是GlobelFilter

过滤器流程

  • 首先自定义了一个AuthFilter接口
  • 当发请求过来,首先执行filte()方法,看是否该路径为放行路径
  • 其次校验JWT令牌
  • 继续校验,根据令牌信息(id)查询角色
  • 如果角色为没有权限的快递员等,则返回没有权限

idea代码具体实现

  • 网关里的过滤器工厂

    • 比如说添加请求头这个操作,我们是配置在yml文件的id下的,

      • 效果:当请求当问到该路由,就会被过滤器拦截
      • 实现:通过过滤器工厂AddRequestHeaderGatewayFilterFactory的apply方法实现
        • 该方法不是执行过滤器的业务逻辑只是返回一个接口对象 ---- GatewayFilter
        • 业务逻辑在GatewayFilter的filter方法中执行
      • 注意:过滤器的名字要和工厂前半部分一致
  • 如果自定义过滤器工厂应该怎么办???

    • 写一个类,名字 : XxxGatewayFilterFactory  继承  和网关继承一样{
        
           apply{
      
           返回一个GatewayFilter接口的实现
      
        }
      
      }
      
    • 如何使用,在yml文件中,-Xxx

    • image-20230611163511059

bug1:权限过滤器中,角色没有判断直接返回true,所以所有用户都可以登录

  • 在idea代码中,定义了四个过滤器工厂,分别校验不同用户端的令牌

  • 四个过滤器工厂用的都是同一个过滤器,TokenGatewayFilter

  • 逻辑虽然一样,但是其中业务逻辑不一样

    • 校验令牌不同 : 自定义了接口,里面方法check(), 提供了具体的实现类,由不同的工厂提供

    • 鉴权不同 : 方法auth()

      • 判断逻辑 : 只有指定的角色才能访问后台管理系统

      • 根据当前登录用户获取 用户的角色列表[]

         Long userId = authUserInfoDTO.getUserId();
         Result<List<Long>> resultRole = AuthTemplateFactory.get(token).opsForRole()
                        .findRoleByUserId(userId);
         List<Long> data = resultRole.getData();
        //做一下判断
        if(CollUtil.isEmpty(data)){
          reture false;
        }
        
      • 获取系统配置中允许访问的角色列表[4个]

        该角色已经通过yml配置,我们可以通过@value拿到,亦可以写配置类拿到,这里演示第二种
          @Data
        @Component
        @ConfigurationProperties(prefix = "role")
        public class ReloConfig {
        
            private List<Long> manager;
            private  List<Long> courier;
            private  List<Long> driver;
        }
        
        List<Long> manager = reloConfig.getManager();
        
      • 看是否被包含,或者求交集

        Collection<Long> intersection = CollUtil.intersection(data, manager);
               
        
      • 是否为空,不为空,有权限,登录成功

        return CollUtil.isNotEmpty(intersection);
        

如何做测试

  • 本地测试 : 本地运行 ---- 改地址即可

    • 当前网关有两个 : 本地idea修改的,虚拟机中部署的 ,我们只需要改变nginx中网关地址为本地即可

      -* nginx里面网关的默认地址为127.0.0.1 : 这里配置的是本地,由于nginx和nacos目前配置在一台电脑上,所以就会找虚拟机容器里(192.168.150.101)的东西,这里面的代码是老代码
        
      -* 我们自己写的东西,地址可以通过虚拟机的网卡获得,vm8的网卡为 192.168.150.1,所以只需要访问网卡,找到对应的地址即可
      
  • 在线测试 :把代码推送致远程仓库,用jekens重新部署

    • 提交代码 : 选中gateway , 进行commit
    • 在jekens中手动构建gateway,线上环境运行最新代码

标签:令牌,角色,网关,校验,拉取,过滤器,权限
From: https://www.cnblogs.com/psuitj/p/17470973.html

相关文章

  • Docker中拉取mysql后无法连接
    在Linux系统中,你可以使用以下命令停止MySQL服务:sudosystemctlstopmysql启动MySQL服务,并跳过权限验证:sudomysqld_safe--skip-grant-tables&在这个命令中,--skip-grant-tables参数将禁止MySQL对用户身份进行验证,因此你可以直接登录到MySQL服务器,而不需要输入......
  • SpringCloud中实现全局过滤器JWT校验
    思路图思路分析用户进入网关开始登陆,网关过滤器进行判断,如果是登录,则路由到后台管理微服务进行登录用户登录成功,后台管理微服务签发JWTTOKEN信息返回给用户用户再次进入网关开始访问,网关过滤器接收用户携带的TOKEN网关过滤器解析TOKEN,判断是否有权限,如果有,则放行,如果没有......
  • 阿里云微服务引擎负责人李艳林:云原生网关当道,会带来哪些改变
    作者:褚杏娟前言:云几乎给每项基础设施都带来了冲击,网关也不例外。近期,云原生网关概念也越来越被大家热议。那么,究竟云原生网关需要具备哪些特点?主流网关产品如何适应云原生?网关标准统一是否必要?云原生网关未来如何发展?此前,Higress发起人、阿里云微服务引擎负责人李艳林(彦林)受邀......
  • 北京君正案例:数传网关的集大成者—积木式边缘网关
    外观介绍数传网关的集大成者USR-M300产品集成了数据的边缘采集、计算、主动上报和数据读写,联动控制,IO采集和控制等功能,采集协议包含标准Modbus协议和多种常见的PLC协议,以及行业专用协议;主动上报采用分组上报方式,自定义Json上报模版,快速实现服务器数据格式的对接。同时USR-M300产品......
  • 西门子PLC智能网关有什么功能?能采集哪些PLC?
    智能制造与自动化技术的发展带来了更高的生产效率、更低的生产成本和更智能的管理模式,为各行各业提供了科学实用的工业物联网方案。西门子PLC是一种应用广泛的可编程逻辑控制器,具有S7-200SMART、S7-300、S7-400、S7-1200、S7-150型号,适用于各种设备的自动化控制,如智能工厂、污水处......
  • wireshark 抓包 过滤器表达式的规则
     https://www.wireshark.org/  DisplayFilter(显示过滤器),用于设置过滤条件进行数据包列表过滤。过滤器表达式的规则1、抓包过滤器语法和实例抓包过滤器类型Type(host、net、port)、方向Dir(src、dst)、协议Proto(ether、ip、tcp、udp、http、icmp、ftp等)、逻辑运算符(&&与、......
  • ASP.NET Core 中间件 中间件(Middleware)和过滤器(Filter)的区别
    前言在上篇文章主要介绍了DotNetCore项目状况,本篇文章是我们在开发自己的项目中实际使用的,比较贴合实际应用,算是对中间件的一个深入使用了,不是简单的HelloWorld,如果你觉得本篇文章对你有用的话,不妨点个【推荐】。目录中间件(Middleware)的作用中间件的运行方式中间件(Middleware)和过......
  • 过滤器-使用Vue.filter定义全局变量
    私有过滤器和全局过滤器在filters节点下定义的过滤器,称为”私有过滤器“,因为它它只能在当前VM实例所控制的el区域内使用。如果希望在多个vue实例之间共享过滤器,则可以按照如下的格式定义全局过滤器:<!DOCTYPEhtml><html> <head> <metacharset="utf-8"> <title></title> ......
  • 【完全揭秘】Traefik云原生网关——助力你的业务破万QPS
    Traefik是一款开源的反向代理和负载均衡软件,可以自动地为多个微服务实例进行负载均衡,并提供HTTP/HTTPS/TCP/UDP等协议支持。Traefik具有简单易用、自动发现服务、动态配置、可插拔的中间件等特点,被广泛应用于云原生和容器化场景中,介绍中也是表明自己是一个云原生网关。Traefik......
  • redis应用场景--实现布隆过滤器
    简述布隆过滤器的实现思路:假设有一个长度为n的比特数组,bit_array,数组里的每一位都是0,对于一个url或者是其他数据,使用hash算法计算出url的散列值,这个散列值当然是一个整数,暂且命名为index,index=index%n,确保index的值小于n,查看bit_array[index]是否等于1,如果等于1,表示该url已......