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
- git clone https://github.com/zjwan461/itsu-token.git
- mvn clean install
- 在需要使用的项目中添加新构建的maven依赖
<dependency>
<groupId>com.itsu</groupId>
<artifactId>itsu-token</artifactId>
<version>1.0</version>
</dependency>
使用者可以在itsu-token-sample中查看到具体的使用案例
-
第一步需要导入maven依赖。
<dependency> <groupId>com.itsu</groupId> <artifactId>itsu-token</artifactId> <version>1.0</version> </dependency>
-
在application.yml或application.properties中开启itsu-token功能
itsu-token: enable: true
-
在需要提供token校验的接口上添加@Token注解
@RestController public class TestController { @Token @GetMapping("/index") public String idx() { return "index"; } }
-
开启自动建表功能
-
提供自动建表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; }
-
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(); } }
-
为何要重写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; }
-
工具方法
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); } }
目前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列表。
- Fork 本仓库
- 新建 Feat_xxx 分支
- 提交代码
- 新建 Pull Request