itsu-token一个手写的第三方token校验SpringBoot Starter模块

介绍

itsu-token作为SpringBoot 的starter 模块依赖SpringBoot环境。使用了hu-tool工具包作为底层开发工具包。依赖Spring Aop进行token校验。支持token的持久化保存,目前仅支持mysql数据库。支持token的可视化构建和管理。token构建,token list页面使用bootstrap和jquery-confirm进行设计。实现了第三方系统调用时的token校验、token注册等功能

软件架构

Spring, SpringBoot, Jquery, Hutool, Spring Aop

安装教程
  1. git clone https://github.com/zjwan461/itsu-token.git
  2. mvn clean install
  3. 在需要使用的项目中添加新构建的maven依赖
<dependency>
    <groupId>com.itsu</groupId>
        <artifactId>itsu-token</artifactId>
    <version>1.0</version>
</dependency>
使用说明

使用者可以在itsu-token-sample中查看到具体的使用案例

一、快速上手
  1. 第一步需要导入maven依赖。

    <dependency>
    	<groupId>com.itsu</groupId>
    	<artifactId>itsu-token</artifactId>
    	<version>1.0</version>
    </dependency>
    
  2. 在application.yml或application.properties中开启itsu-token功能

    itsu-token:
      enable: true
    
  3. 在需要提供token校验的接口上添加@Token注解

    @RestController
    public class TestController {
    	@Token
    	@GetMapping("/index")
    	public String idx() {
    		return "index";
    	}
    }
    
二、自动创建token数据库表
  1. 开启自动建表功能

  2. 提供自动建表schema.sql

    itsu-token:
      enable: true
      init:
        auto-create-table: true
        schema-location: classpath:example.sql
    

    需要留意的是,即使使用者不提供schema,itsu-token也内置了两种建表方案。他们分别是rsaSchema.sql和simpleSchema.sql,分别对应了系统内置的两种校验方式“RSA” & “SIMPLE”
    在这里插入图片描述

    通常情况下我建议直接使用内置的schema完成自动建表,如果使用者一定要使用自定义的schema建表,还需要开启custom-schema功能,并给出自定义的schema-location。并且需要在IOC容器中注入TableSample接口的实现类。并且使用特定的“表结构修饰注解”给这个类打上标记,以适配使用者在自定义schema脚本建表的表接口。请看如下一个完整的使用案例。

    我准备了一个example.sql作为自定义建表的schema文件

    CREATE TABLE IF NOT EXISTS sys_token (
        id char(32) not null primary key,
        name varchar(255) not null,
        simple_token char(32) not null
    );
    

    同时我也开启了auto-create-table和custom-schema功能,并给出了schema文件的所在位置。

    itsu-token:
      enable: true
      init:
        auto-create-table: true
        schema-location: classpath:example.sql
        custom-schema: true  #声明开启自定义schema功能
      web-register:
        enable: true
    

    此时我还需要自定义一个tableSample类,如下。使用TableDesc,TableId,SimpleToken,SysName这几个注解完成和自定义example.sql的表结构统一。另一种验证方式RSA和这种方式是一致的,只不过不再使用SimpleToken这个注解,取而代之的是PrivateKey, PublicKey这两个注解。用于表示RSA非对称加密中的“公钥”和“私钥”。

    @TableDesc("sys_token")
    public class MySimpleTableSample implements TableSample {
    	@TableId
    	private String id;
        
    	@SimpleToken("simple_token")
    	private String token;
    	
    	@SysName("name")
    	private String name;
    	
    }
    
三、自定义Token验证规则
  1. itsu-token提供了自定义的Token校验机制。让使用者可以根据自己的需求,个性化的来定制自己所需的token校验。你需要继承一个com.itsu.itsutoken.checker.CusTokenChecker抽象类,并重写check()、getTableSample() 方法。

    public class MyCustomTokenChecker extends CusTokenChecker<MyCustomTableSample> {
    
    	@Override
    	public void check(JoinPoint joinPoint) throws TokenCheckException {
    		// do some check here
    	}
    
    	@Override
    	public MyCustomTableSample getTableSample() {
    		return new MyCustomTableSample();
    	}
    
    }
    
    
  2. 为何要重写getTableSample()方法?因为对于自定义token校验来说,使用者在数据库中存储的token信息是不明确的,也无法知道使用者需要进行那种方式的token校验。所以需要给出数据库中存储token信息的表的结构。对于这种要求,itsu-token是通过TableSample类+TableSample注解来实现的。这一点在上文中的custom-schema中也有提及。那也就意味着如果使用者使用了自动建表功能,那就需要同时给出schema-location,然后还需要定义TableSample的具体实现。当然手动建表也需要提供TableSample的具体实现。

    @TableDesc("tb_token")
    public class MyCustomTableSample implements TableSample {
    
    	@TableId
    	private String id;
    	
    	@TableField("custom_field")
    	private String token;
    }
    
    
    
  3. 工具方法

    CustomTokenChecker提供了三个基本工具方法,分别是getTableFieldNames(),getTableName(),getTableId()用来获取用户自定义TableSample的字段&表的定义。可以方便后期使用者获取Table的详细信息。我知道这样看起来多此一举,因为我大部分会用到自定义token校验的使用者都会清楚的知道表结构是什么样子的,直接写原生的sql查询数据就可以达到目标。这里只是提供一种方式。

    protected List<String> getTableFieldNames() throws TokenCheckException {
    		try {
    			return ClassUtil.getTableFieldValues(tableSample.getClass());
    		} catch (Exception e) {
    			throw new TokenCheckException(e);
    		}
    	}
    
    protected String getTableName() throws TokenCheckException {
    		try {
    			return AnnotationUtil.getAnnotationValue(tableSample.getClass(), TableDesc.class);
    		} catch (UtilException e) {
    			throw new TokenCheckException(e);
    		}
    }
    
    protected String getTableId() throws TokenCheckException {
    		try {
    			return ClassUtil.getId(tableSample.getClass());
    		} catch (Exception e) {
    			throw new TokenCheckException(e);
    		}
    }
    
    
四、web register 功能

​ 目前itsu-token仅对默认支持的Token校验类型“simple”,”rsa“ 提供了web register功能。至于web register,顾名思义就是提供了集成化的非侵入式的通过web方式来向系统注册token的功能。在itsu-token中,这一功能,默认是关闭的。需要在配置文件中开启。如下是一个web-register功能的完整配置。可以看到的是除了web register的开关位,还提供了几个选项。详细的解释可以参考下文的定义。需要注意的是,web register目前暂时不支持自定义校验,也就是custom token check。

itsu-token:
  web-register:
    enable: true
    user: admin
    password: password
    register-url: /register.html
    token-list-url: /tokenlist.html

​ 当你开启web register后,想要访问到tokenlist.html, 此时itsu-token会要求你先进行登录。账号和密码也就是在上述代码中所配置的。
在这里插入图片描述
当你完成登录后,就能访问register.html和tokenlist.html了。你可以在register页面做token的注册工作,在tokenlist.html查看已注册的token列表。
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值