# KaTool Security鉴权框架文档

template

SpringBoot-2.7.0SpringCloudGateWay-2.7.0SpringCloudZuul-2.7.0KaTool-1.9.5.GAMA

# 1. 简介

KaTool Security鉴权框架是KaTool提供的权限管理工具,基于Spring Boot和Dubbo实现,可以针对SpringCloudGateWay和Zuul等流行网关框架进行自定义鉴权逻辑适配,使开发者更注重逻辑开发,而不被项目架构所影响,使用TokenUtil也能够快速进行框架转换而不用改编原本的代码逻辑。

  • 单体到微服务快速升级

  • 无视网关组件进行自适应

  • 拥有专用中台,便于管理

  • 拥有Token管理,上下线、踢人、角色可视化管理

    image-20240216044605157

    image-20240216044654758

    image-20240216044731072

# 2. 模块简介

# 2.1 主要模块

  • katool-security-starter-parent 主工程父模块
    • katool-security-core 核心模块
    • katool-security-interceptor AOP注解拦截器
    • katool-security-spring-boot-starter 给外部项目引用的Starter包
    • katool-security-interface 微服务模式 - Dubbo远程调用Interface层
    • katool-security-auth 微服务模式 - 鉴权中心服务
    • katool-security-task 定时任务模块-Token-LRU过期删除
    • katool-security-gateway-starter-parent 微服务 - 网关层面鉴权starter父模块
      • katool-security-gateway-core
      • katool-security-gateway-spring-cloud-gateway-starter Spring Cloud GateWay 网关鉴权Starter
      • katool-security-gateway-zuul-starter Zuul 网关鉴权Starter
└─katool-security-starter-parent
   └─katool-security-auth						# 微服务鉴权中心服务
   │  └─src/main/java
   │          └─cn.katool.security
   │                      └─auth
   │                          ├─aop				# 日志记录切面
   │                          ├─controller		# 鉴权服务控制器
   │                          ├─exception		# 异常处理
   │                          ├─job				# 定时任务 - 每10分钟自动关闭所有接口鉴权
   │                          ├─mapper			# MyBatisPlus-Mapper层
   │                          ├─model			# Auth实体类、KaSecurityUser实体类
   │                          ├─service			# AuthController对应的service层,以及KaSecurityUser
   │                          └─utils			# 用到的一些工具类
   ├─katool-security-core
   │  └─src/main/java
   │         └─cn.katool.security
   │                     └─common
   │                         ├─annotation		# 鉴权注解(@AuthCheck)
   │                         ├─constant		# 常量
   │                         ├─logic			# 微服务鉴权处理逻辑层
   │                         ├─model
   │                         │  ├─dto/auth
   │                         │  ├─entity
   │                         │  └─vo
   │                         └─utils			# JSON转换工具
   ├─katool-security-gateway-starter-parent	# 微服务 - 网关层面鉴权starter父模块
   │  ├─katool-security-gateway-core		# 统一接口(用于获取Token,但是Request由于不同框架实现不同,各自自行实现Request上下文获取)
   │  │  └─src/main/java
   │  │              └─cn.katool.security.gateway
   │  │                              └─service
   │  ├─katool-security-gateway-spring-cloud-gateway-starter		# Spring Cloud GateWay Starter
   │  │  └─src/main/java
   │  │           └─cn.katool.security.starter
   │  │                           ├─gateway
   │  │                           └─utils
   │  └─katool-security-gateway-zuul-starter						# Zuul Stater
   ├─katool-security-interceptor
   │  └─src/main/java
   │              └─cn.katool.security
   │                          └─interceptor	# AOP鉴权拦截切面逻辑
   ├─katool-security-interface
   │  └─src/main/java
   │              └─cn.katool.security
   │                          └─service		# Dubbo 远程调用接口
   └─katool-security-spring-boot-starter		# 单体项目引入的Starter
       └─src/main/java
                   └─cn.katool.security
                               └─starter

# 2.2 其他模块

  • katool-security-demo 一些使用样例
    • katool-security-boot-simple-demo 在单体项目下的使用样例
    • katool-security-gateway-simple-demo 微服务模式,在SpringCloudGateWay作为网关的前提下的使用样例
    • katool-security-zuul-simple-demo 微服务模式,在Zuul作为网关的前提下的使用样例
└─katool-security-demo
   ├─katool-security-boot-simple-demo
   ├─katool-security-gateway-simple-demo
   └─katool-security-zuul-simple-demo

# 3. 鉴权逻辑实现

# 3.1 实现KaSecurityAuthLogic接口继承工具类

@Component
public class AuthConfig extends KaSecurityAuthUtil<需要鉴权的类型> implements KaSecurityAuthLogic{
    @Override
    public KaSecurityValidMessage doCheckLogin(Boolean onlyCheckLogin) {
       
        return KaSecurityValidMessage.unKnow();
    }

    @Override
    public KaSecurityValidMessage doAuth(List<String> roleList) {
        // 这里可以根据角色列表进行鉴权,返回鉴权失败或者鉴权成功的消息
        System.out.println("进入鉴权,roleList:" + roleList);
        return KaSecurityValidMessage.success();
    }

    @Bean
    private void initAuth(){
        // 加入鉴权
        KaToolSecurityAuthQueue.add(this);
    }
}

# 3.2 将MySecurityAuthLogic加入鉴权执行队列

定义一个Bean,执行语句就可以了,你也可以使用自动装配,在这里由于使@Bean,并且MySecurityAuthLogic被@Component标记,所以会自动对MySecurityAuthLogic的成员属性进行自动装配

public class BeanClass{
    
    @Bean
    void run(List<String> routeList){
        KaToolSecurityAuthQueue.add(new MySecurityAuthLogic());
    }
    
}