├── .github
└── workflows
│ └── release.yml
├── .gitignore
├── .idea
├── .gitignore
├── compiler.xml
├── dataSources.xml
├── encodings.xml
├── jarRepositories.xml
├── misc.xml
├── uiDesigner.xml
└── vcs.xml
├── CHANGELOG.md
├── LICENSE
├── README.md
├── assistant-boot-start
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── io
│ │ │ └── github
│ │ │ └── config
│ │ │ └── AppConfig.java
│ └── resources
│ │ ├── META-INF
│ │ └── spring.factories
│ │ └── application.yaml
│ └── test
│ └── java
│ └── io
│ └── github
│ ├── AppTest.java
│ └── util
│ ├── RegexUtilsTest.java
│ └── TokenUtilsTest.java
├── assistant-cache
├── pom.xml
└── src
│ └── main
│ └── java
│ └── io
│ └── github
│ └── common
│ └── RedisKey.java
├── assistant-common
├── pom.xml
└── src
│ ├── main
│ └── java
│ │ └── io
│ │ └── github
│ │ ├── base
│ │ └── MethodDecompose.java
│ │ ├── common
│ │ ├── Args.java
│ │ ├── SafeBag.java
│ │ ├── Status.java
│ │ ├── logger
│ │ │ ├── CommonLogger.java
│ │ │ ├── LoggerHandler.java
│ │ │ └── Sl4jLoggerHandler.java
│ │ ├── msgbuilder
│ │ │ ├── AbstractMsgBuilder.java
│ │ │ └── MsgBuilder.java
│ │ └── web
│ │ │ ├── PageVO.java
│ │ │ └── Result.java
│ │ ├── constant
│ │ └── TimeConstant.java
│ │ └── pool
│ │ └── StatusPool.java
│ └── test
│ └── java
│ └── io
│ └── github
│ └── AppTest.java
├── assistant-mysql
├── pom.xml
└── src
│ └── main
│ └── java
│ └── io
│ └── github
│ ├── common
│ ├── JoinSection.java
│ └── PageVO.java
│ ├── query
│ └── QueryParamGroup.java
│ ├── service
│ ├── AssistantMJPService.java
│ ├── AssistantMJPServiceImpl.java
│ ├── AssistantService.java
│ └── AssistantServiceImpl.java
│ └── util
│ └── PageUtil.java
├── assistant-plus-generator
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── io
│ │ │ └── github
│ │ │ ├── common
│ │ │ ├── apiJs
│ │ │ │ ├── ApiJs.java
│ │ │ │ └── ApiMethod.java
│ │ │ └── mysql
│ │ │ │ ├── Column.java
│ │ │ │ ├── DataBase.java
│ │ │ │ └── Table.java
│ │ │ ├── controller
│ │ │ ├── HelloController.java
│ │ │ └── TestController.java
│ │ │ ├── generator
│ │ │ ├── AutoApiJsGenerate.java
│ │ │ ├── AutoGenerate.java
│ │ │ ├── autotemplate
│ │ │ │ ├── ApiJsTemplateFile.java
│ │ │ │ └── TemplateFile.java
│ │ │ ├── builder
│ │ │ │ ├── ApiJsTemplateBuilder.java
│ │ │ │ └── TemplateBuilder.java
│ │ │ └── mysqlClassGenerate.java
│ │ │ └── util
│ │ │ └── VelocityUtils.java
│ └── resources
│ │ ├── js
│ │ └── HelloController.js
│ │ └── templates
│ │ ├── apiJs.java.vm
│ │ └── mysqlClass.java.vm
│ └── test
│ └── java
│ └── io
│ └── github
│ └── generator
│ └── AutoApiJsGenerateTest.java
├── assistant-service
├── pom.xml
└── src
│ ├── main
│ └── java
│ │ └── io
│ │ └── github
│ │ ├── exception
│ │ └── handler
│ │ │ ├── AbstractExceptionHandler.java
│ │ │ ├── AssistantExceptionHandlerCondition.java
│ │ │ ├── CommonExceptionHandler.java
│ │ │ ├── SpringWebExceptionHandler.java
│ │ │ ├── ValidateExceptionHandler.java
│ │ │ └── annotation
│ │ │ └── AssistantControllerAdvice.java
│ │ ├── id
│ │ ├── IdGenerator.java
│ │ ├── IdGeneratorException.java
│ │ ├── UUIDGenerator.java
│ │ └── snowflake
│ │ │ ├── DefaultSnowflakeRegister.java
│ │ │ ├── RedisSnowflakeRegister.java
│ │ │ ├── SnowflakeGenerator.java
│ │ │ ├── SnowflakeRegister.java
│ │ │ └── SnowflakeRegisterException.java
│ │ └── servicechain
│ │ ├── ServiceChainContext.java
│ │ ├── ServiceChainFactory.java
│ │ ├── annotation
│ │ ├── Chain.java
│ │ └── MultiFilterFunc.java
│ │ ├── bootstrap
│ │ ├── ChainHandler.java
│ │ ├── FailCallback.java
│ │ ├── ReturnType.java
│ │ ├── ServiceChainBootstrap.java
│ │ ├── ServiceChainCallback.java
│ │ ├── ServiceChainHandler.java
│ │ └── SuccessCallback.java
│ │ ├── chain
│ │ ├── AbstractFilterChain.java
│ │ ├── ChainBluePrint.java
│ │ ├── FilterChain.java
│ │ ├── MultiArgsFilterChain.java
│ │ ├── ServiceChain.java
│ │ ├── ServiceChainProvider.java
│ │ ├── ServicePointServiceChainProvider.java
│ │ └── YamlServiceChainProvider.java
│ │ └── common
│ │ └── ServiceHelper.java
│ └── test
│ └── java
│ └── io
│ └── github
│ └── serviceHelper
│ └── login
│ └── FormLoginServiceTest.java
├── assistant-test
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── io
│ │ │ └── github
│ │ │ ├── TestApplication.java
│ │ │ ├── chain
│ │ │ ├── ExceptionFilterChain.java
│ │ │ ├── ObjectNotEmptyFilterChain.java
│ │ │ ├── ReturnMapFilterChain.java
│ │ │ ├── StringNotEmptyFilterChain.java
│ │ │ └── TaskCheckFilterChain.java
│ │ │ ├── config
│ │ │ └── MybatisConfiguration.java
│ │ │ ├── controller
│ │ │ └── TestController.java
│ │ │ ├── mapper
│ │ │ ├── FeedbackMapper.java
│ │ │ ├── FeedbackTypeMapper.java
│ │ │ └── NoticeMapper.java
│ │ │ ├── pojo
│ │ │ ├── FeedbackDO.java
│ │ │ ├── FeedbackTypeDO.java
│ │ │ ├── NoticeDO.java
│ │ │ ├── TaskDO.java
│ │ │ └── vo
│ │ │ │ ├── FeedbackVO.java
│ │ │ │ └── NoticeVO.java
│ │ │ └── service
│ │ │ ├── FeedbackDaoServiceImpl.java
│ │ │ ├── FeedbackTypeServiceImpl.java
│ │ │ └── NoticeDaoServiceImpl.java
│ └── resources
│ │ └── application.yml
│ └── test
│ └── java
│ └── io
│ └── github
│ └── geniusay
│ ├── common
│ └── LoggerTest.java
│ ├── mysql
│ ├── AssistantServiceTest.java
│ └── QueryParamGroupTest.java
│ └── service
│ ├── exception
│ └── ExceptionHandlerTest.java
│ ├── id
│ └── IdGeneratorTest.java
│ └── servicechain
│ └── ServiceChainTest.java
├── assistant-util
├── pom.xml
└── src
│ ├── main
│ └── java
│ │ └── io
│ │ └── github
│ │ └── util
│ │ ├── ClassUtil.java
│ │ ├── GenericityUtils.java
│ │ ├── StringUtils.java
│ │ ├── autochecker
│ │ ├── AutoChecker.java
│ │ └── Checker.java
│ │ ├── collection
│ │ ├── list
│ │ │ └── SharedList.java
│ │ └── map
│ │ │ ├── MapNode.java
│ │ │ ├── WeightMapNode.java
│ │ │ └── dag
│ │ │ └── WorkWeightMapNode.java
│ │ ├── convert
│ │ └── ZhConvertUtil.java
│ │ ├── encryption
│ │ ├── AESEncryptionUtils.java
│ │ ├── Base64EncryptionUtils.java
│ │ ├── DESEncryptionUtils.java
│ │ ├── EncryptionFactory.java
│ │ ├── EncryptionType.java
│ │ ├── EncryptionUtil.java
│ │ ├── MD5EncryptionUtils.java
│ │ └── RSAEncryptionUtils.java
│ │ ├── file
│ │ ├── CommonFileUtils.java
│ │ ├── FileCondition.java
│ │ └── JsonFileUtil.java
│ │ ├── path
│ │ └── PathUtils.java
│ │ ├── random
│ │ ├── SnowflakeUtils.java
│ │ └── UUIDGeneratorUtils.java
│ │ ├── regex
│ │ ├── RegexPattern.java
│ │ ├── RegexPool.java
│ │ └── RegexUtils.java
│ │ ├── time
│ │ └── TimeUtil.java
│ │ └── token
│ │ ├── JWTTokenProperties.java
│ │ ├── Token.java
│ │ └── TokenUtil.java
│ └── test
│ └── java
│ └── io
│ └── github
│ └── util
│ ├── AutoCheckerTest.java
│ ├── EncryptionUtilsTest.java
│ ├── PathUtilsTest.java
│ ├── RegexUtilsTest.java
│ ├── TokenUtilsTest.java
│ └── list
│ ├── SharedListJMHTest.java
│ └── SharedListTest.java
├── assistant-websocket
├── pom.xml
└── src
│ └── main
│ └── java
│ └── io
│ └── github
│ └── webscoket
│ └── core
│ ├── MessageHandlerFactory.java
│ ├── WebSocketHandler.java
│ └── handler
│ ├── AbstractMessageHandler.java
│ ├── MessageHandler.java
│ └── MessageProtocol.java
└── pom.xml
/.github/workflows/release.yml:
--------------------------------------------------------------------------------
1 | name: Publish package to the Maven Central Repository
2 | on:
3 | workflow_dispatch:
4 | release:
5 | types: [ published ]
6 | push:
7 | tags: [ "*" ]
8 | jobs:
9 | publish:
10 | runs-on: ubuntu-latest
11 | steps:
12 | - uses: actions/checkout@v2
13 | - name: Set up Maven Central Repository
14 | uses: actions/setup-java@v2
15 | with:
16 | java-version: '11'
17 | distribution: 'adopt'
18 | server-id: ossrh
19 | server-username: MAVEN_USERNAME
20 | server-password: MAVEN_PASSWORD
21 | - id: install-secret-key
22 | name: Install gpg secret key
23 | run: |
24 | cat <(echo -e "${{ secrets.OSSRH_GPG_SECRET_KEY }}") | gpg --batch --import
25 | gpg --list-secret-keys --keyid-format LONG
26 | - name: Publish package
27 | env:
28 | MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
29 | MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
30 | run: mvn --batch-mode -Dgpg.passphrase=${{ secrets.OSSRH_GPG_SECRET_KEY_PASSWORD }} clean deploy -DskipTests
31 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Project exclude paths
2 | /target/
3 |
4 |
--------------------------------------------------------------------------------
/.idea/.gitignore:
--------------------------------------------------------------------------------
1 | # Default ignored files
2 | /shelf/
3 | /workspace.xml
4 | # Editor-based HTTP Client requests
5 | /httpRequests/
6 | # Datasource local storage ignored files
7 | /dataSources/
8 | /dataSources.local.xml
9 |
--------------------------------------------------------------------------------
/.idea/compiler.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
40 |
41 |
--------------------------------------------------------------------------------
/.idea/dataSources.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | mysql
6 | true
7 | com.mysql.jdbc.Driver
8 | jdbc:mysql://localhost:3306/deepVideo
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | mysql
20 | true
21 | com.mysql.jdbc.Driver
22 | jdbc:mysql://wumulong.space:3306/deepVideo
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/.idea/encodings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/.idea/jarRepositories.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # CHANGELOG
2 | ```markdown
3 | 格式:
4 | ## [版本号] - 日期
5 | ### 模板名称 (可选 console-ui, console, FileModule, common, ...)
6 | - 🎈新增: {模块名称} {功能介绍}
7 | - 🐞Bug: #{issue号} {bug描述}
8 | - ⛏修复: #{issue号} {修复描述}
9 | - 📝文档: {文件名} 添加注释
10 | - 🚀性能: {类} {方法} {描述}
11 | - 🎨样式:
12 | - 🧹重构:
13 | - 🧪测试: {类|方法} {测试结果}
14 | - 🛑更名: {旧名} ➡ {新名}
15 | - ❌移除: {模块|方法}
16 |
17 | ------
18 |
19 | ```
20 | ------
21 | ## [v1.1.1] - 2023.4.28
22 | - 🧹重构:重构整个框架,目前分为了util模块,service模块,generator模块,common模块
23 | - 🎈新增:`JsonFileUtil,FileUtil`,用于进行文件操作和Json文件读取与写入
24 | ------
25 | ## [v1.0.7] - 2023.4.4
26 | - 🎈新增`AutoChecker`自动检查器,用于检查参数是否符合要求
27 | - 定义了`BaseServiceChain` 与 `ServiceNode`,为之后的业务流以及业务链提供基础
28 | ------
29 | ## [v1.0.6] - 2023.4.4
30 | - ⛏bug:修复`TokenUtils`某些函数未进行空值处理判断
31 | - 完善`TokenUtils`工具类,`Token`类现在包含`Header`了
32 | - 加密工厂类`EncryptFactory`新增`add`方法,可以添加用户自定义的加密解密工具类
33 | ------
34 | ## [v1.0.5] - 2023.4.1
35 | - 📌bug:修复`AutoApiJsGenerate`在SpringBoot2.6.4版本下路径映射改变问题,添加了自适应版本路径获取方法
36 | ------
37 | ## [v1.0.4] - 2023.3.31
38 | - 🎈新增`RegexUtils`工具类,用于进行正则表达式匹配功能
39 | - 🎈新增`RegexPattern`正则表达式常量类
40 | ------
41 | ## [v1.0.3] - 2023.3.24
42 | - 🎈新增`PathUtils`工具类,用于进行路径解析功能
43 | - 🎈新增`FileUtils`工具类,用于进行文件操作功能
44 | - 🎈新增`EncryptUtils`工具类,用于进行加密解密功能,目前具有AES,RSA,BASE64,MD5等加密方法
45 | - 🎈新增加密工厂类`EncryptFactory`,用于获取加密解密工具类
46 | ------
47 | ## [v1.0.2] - 2023.3.23
48 | - 热身模块ApiJs生成工具大更新,支持多种模板生成方式,更名为 `AutoApiJsGenerate`
49 | - 🎈新增文件信息类
50 | - 🎈新增 `AutoGenerate` 接口
51 | - 🎈新增 `AutoApiJsGenerate` 自定义模板生成,异步生成,过滤器
52 | ------
53 | ## [v1.0.1] - 2023.3.22
54 | - 📌bug:修复 `AutoApiJsGenerateHelper` 模块的对于RestMapping多个请求方式会出现解析出错的问题
55 | - 🎈新增 `TokenUtil工具类`,用于生成token和解析token
56 | ------
57 | ## [v1.0.0] - 2023.3.20
58 | - 项目发布到Maven仓库
59 | - 热身模块新增 `AutoApiJsGenerateHelper` 模块
60 | ------
61 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Low code,high efficiency
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 | ## 什么是Assistant?
17 |
18 | Assistant (opens new window)是一个后端开发的小助手,提供多种工具,自动生成器,以及多种高性能高自由度业务方法,让你在开发道路上更加简便。
19 |
20 | ## 相关链接
21 |
22 | - [Documentation](https://tmlgenius.github.io/assistant-docs/)
23 | - [Gitee](https://gitee.com/sbg-genius/Assistant)
24 |
25 | ## 特点
26 |
27 | - **赛前热身**:提供多个开发前的“热身”工具,所谓热身工具指的是快速完成api文件的创建,controller文件,mapper文件等重复度高的编码工作,可以直接开始项目开发
28 | - **百宝箱**:蕴含多种工具类,在打造项目的无需再东翻西找打造工具
29 | - **业务大师**:包含多种多样的业务,高性能,低代码,根据你的需要自行DIY,几行代码轻松搞定
30 | - **内置代码生成器**:内置多种文件生成器,apiJs,controller,VO,DTO等等
31 | #代码托管
32 |
33 | ## 快速开始
34 |
35 | - Add Assistant dependency
36 | - Latest Version: [](https://central.sonatype.com/artifact/io.github.geniusay/assistant-boot-start/1.0.3)
37 | - Maven:
38 | ```xml
39 |
40 | io.github.Geniusay
41 | assistant-boot-start
42 | 1.1.2
43 |
44 | ```
45 |
46 | > 更多详情请前往 [documentation](https://tmlgenius.github.io/assistant-docs/).
47 |
--------------------------------------------------------------------------------
/assistant-boot-start/pom.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 | assistant
5 | io.github.geniusay
6 | 1.1.2
7 |
8 | 4.0.0
9 |
10 | ${assistant-boot-start.version}
11 | assistant-boot-start
12 | jar
13 |
14 | assistant-boot-start
15 | http://maven.apache.org
16 |
17 |
18 | UTF-8
19 |
20 |
21 |
22 |
23 | io.github.geniusay
24 | assistant-common
25 |
26 |
27 |
28 | io.github.geniusay
29 | assistant-util
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/assistant-boot-start/src/main/java/io/github/config/AppConfig.java:
--------------------------------------------------------------------------------
1 | package io.github.config;
2 |
3 | import org.springframework.context.annotation.ComponentScan;
4 | import org.springframework.context.annotation.Configuration;
5 |
6 |
7 | @Configuration
8 | @ComponentScan("io.github.*")
9 | public class AppConfig {
10 |
11 | public AppConfig() {
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/assistant-boot-start/src/main/resources/META-INF/spring.factories:
--------------------------------------------------------------------------------
1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
2 | io.github.config.AppConfig
3 |
--------------------------------------------------------------------------------
/assistant-boot-start/src/main/resources/application.yaml:
--------------------------------------------------------------------------------
1 | assistant:
2 | token:
3 | access-token-expire-time: 3600
4 | access-token-time-unit: SECONDS
5 | enable-refresh: true
6 | regex:
7 | pool:
8 | phone: ^1[3|4|5|7|8][0-9]{9}$#$
9 |
--------------------------------------------------------------------------------
/assistant-boot-start/src/test/java/io/github/AppTest.java:
--------------------------------------------------------------------------------
1 | package io.github;
2 |
3 | import junit.framework.Test;
4 | import junit.framework.TestCase;
5 | import junit.framework.TestSuite;
6 | import org.springframework.boot.test.context.SpringBootTest;
7 |
8 | /**
9 | * Unit test for simple App.
10 | */
11 | @SpringBootTest
12 | public class AppTest
13 | extends TestCase
14 | {
15 | /**
16 | * Create the test case
17 | *
18 | * @param testName name of the test case
19 | */
20 | public AppTest( String testName )
21 | {
22 | super( testName );
23 | }
24 |
25 | /**
26 | * @return the suite of tests being tested
27 | */
28 | public static Test suite()
29 | {
30 | return new TestSuite( AppTest.class );
31 | }
32 |
33 | /**
34 | * Rigourous Test :-)
35 | */
36 | public void testApp()
37 | {
38 | assertTrue( true );
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/assistant-boot-start/src/test/java/io/github/util/RegexUtilsTest.java:
--------------------------------------------------------------------------------
1 | package io.github.util;
2 |
3 |
4 | import io.github.util.regex.RegexUtils;
5 | import org.junit.jupiter.api.Test;
6 | import org.springframework.beans.factory.annotation.Autowired;
7 | import org.springframework.boot.test.context.SpringBootTest;
8 |
9 | /**
10 | * Genius
11 |
12 | **/
13 |
14 | @SpringBootTest
15 | public class RegexUtilsTest {
16 | @Autowired
17 | RegexUtils regexUtils;
18 | @Test
19 | public void testRegexPool(){
20 | System.out.println(regexUtils.getRegexPool().getPhone());
21 | }
22 |
23 | @Test
24 | public void testRegexUtils(){
25 | System.out.println("邮箱是否正确:"+regexUtils.isEmail("123456789@qq.com"));
26 | System.out.println("邮箱是否正确:"+regexUtils.isEmail("123456789@qqcom"));
27 | System.out.println("电话是否正确:"+regexUtils.isPhone("13601607121"));
28 | System.out.println("电话是否正确:"+regexUtils.isPhone("1234567890"));
29 | System.out.println("电话(严格)是否正确:"+regexUtils.isPhone("123456789012",true));
30 | System.out.println("电话(严格)是否正确:"+regexUtils.isPhone("13601607121",true));
31 | System.out.println("QQ是否正确:"+regexUtils.VerifyRegex("123456789", regexUtils.getRegexPool().getQq()));
32 | System.out.println("QQ是否正确:"+regexUtils.VerifyRegex("1142880114", regexUtils.getRegexPool().getQq()));
33 | }
34 |
35 | }
36 |
--------------------------------------------------------------------------------
/assistant-boot-start/src/test/java/io/github/util/TokenUtilsTest.java:
--------------------------------------------------------------------------------
1 | package io.github.util;
2 |
3 |
4 | import io.github.util.token.Token;
5 | import io.github.util.token.TokenUtil;
6 | import io.jsonwebtoken.Claims;
7 | import io.jsonwebtoken.Jwts;
8 | import org.junit.jupiter.api.Test;
9 | import org.springframework.beans.factory.annotation.Autowired;
10 | import org.springframework.boot.test.context.SpringBootTest;
11 |
12 | import java.util.Date;
13 | import java.util.Map;
14 |
15 | /**
16 | * Genius
17 |
18 | **/
19 | @SpringBootTest
20 | public class TokenUtilsTest {
21 | @Autowired
22 | TokenUtil tokenUtils;
23 | class User{
24 | private String name;
25 | private int age;
26 | public User(String name, int age) {
27 | this.name = name;
28 | this.age = age;
29 | }
30 |
31 | }
32 | @Test
33 | public void testCreateToken(){
34 | User user = new User("Genius",18);
35 | Claims claims = Jwts.claims();
36 | claims.put("user",user);
37 |
38 | String token = tokenUtils.createToken("user",user,"123456").getAccessToken();
39 | String token2 = tokenUtils.createToken(Map.of("user",user),"123456").getAccessToken();
40 | String token3 = tokenUtils.createToken(
41 | Map.of("type","jwt","alg","HS256"), //token头信息
42 | claims, //token payload
43 | new Date(), //token签发时间
44 | new Date(new Date().getTime() + 60*1000), //token过期时间
45 | new Date(new Date().getTime() + 120*1000), //token刷新时间,如果未启用则无效
46 | new Date(new Date().getTime()), //Token生效时间
47 | "Genius", //token签名者
48 | "public Path", //公共区域
49 | tokenUtils.getJwtTokenProperties().getJit(), //token唯一身份标识
50 | "Genius", //发布人
51 | true //是否需要进行刷新操作
52 | ).getAccessToken();
53 | System.out.println(tokenUtils.parseTokenToToken(token, "user", User.class));
54 | System.out.println(tokenUtils.parseTokenToToken(token2, "user", User.class));
55 | System.out.println(tokenUtils.parseTokenToToken(token3, "user", User.class));
56 | System.out.println(tokenUtils.parseTokenToObj(token3, "user", User.class));
57 | }
58 |
59 | @Test
60 | public void tesReFreshToken(){
61 | User user = new User("Genius",18);
62 | Claims claims = Jwts.claims();
63 | claims.put("user",user);
64 | Token token = tokenUtils.createToken(
65 | Map.of("type","jwt","alg","HS256"), //token头信息
66 | claims, //token payload
67 | new Date(), //token签发时间
68 | new Date(new Date().getTime() + 10), //token过期时间
69 | new Date(new Date().getTime() + 120*1000), //token刷新时间,如果未启用则无效
70 | new Date(new Date().getTime()), //Token生效时间
71 | "Genius", //token签名者
72 | "public Path", //公共区域
73 | tokenUtils.getJwtTokenProperties().getJit(), //token唯一身份标识
74 | "Genius", //发布人
75 | true //是否需要进行刷新操作
76 | );
77 | System.out.println(token.getAccessToken());
78 | System.out.println(tokenUtils.refreshToken(token).getAccessToken());
79 |
80 | }
81 |
82 | @Test
83 | public void testCreateTokenByMap(){
84 | String accessToken = tokenUtils.createToken(Map.of(
85 | "username", "Genius",
86 | "uid", "123456"
87 | ), "123456").getAccessToken();
88 | System.out.println(tokenUtils.parseTokenToObj(accessToken, "username", String.class));
89 | }
90 |
91 | }
92 |
--------------------------------------------------------------------------------
/assistant-cache/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 | assistant
7 | io.github.geniusay
8 | 1.1.2
9 |
10 | 4.0.0
11 | ${assistant-cache.version}
12 | assistant-cache
13 |
14 |
15 | 11
16 | 11
17 | UTF-8
18 |
19 |
20 |
21 |
22 | org.springframework.data
23 | spring-data-redis
24 |
25 |
26 |
27 | org.springframework.boot
28 | spring-boot-starter-data-redis
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/assistant-cache/src/main/java/io/github/common/RedisKey.java:
--------------------------------------------------------------------------------
1 | package io.github.common;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 |
6 | import java.util.concurrent.TimeUnit;
7 |
8 | /**
9 | * @author Genius
10 | * 2023/08/15 23:11
11 | **/
12 | @Data
13 | public class RedisKey {
14 | private String key;
15 | private long time;
16 | private TimeUnit timeUnit;
17 |
18 | public RedisKey(String key, long time, TimeUnit timeUnit) {
19 | this.key = key;
20 | this.time = time;
21 | this.timeUnit = timeUnit;
22 | }
23 |
24 | public RedisKey(String key) {
25 | this.key = key;
26 | this.time = -1;
27 | this.timeUnit = TimeUnit.SECONDS;
28 | }
29 |
30 | public String getKey(Object value){
31 | return String.format(key,value);
32 | }
33 |
34 | public String getKey(Object...values){
35 | return String.format(key,values);
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/assistant-common/pom.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 | assistant
5 | io.github.geniusay
6 | 1.1.2
7 |
8 | 4.0.0
9 |
10 | assistant-common
11 | jar
12 | ${assistant-common.version}
13 | assistant-common
14 | http://maven.apache.org
15 |
16 |
17 | UTF-8
18 |
19 |
20 |
21 |
22 | org.springframework.boot
23 | spring-boot-starter-web
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/assistant-common/src/main/java/io/github/base/MethodDecompose.java:
--------------------------------------------------------------------------------
1 | package io.github.base;
2 |
3 | import javassist.ClassPool;
4 | import javassist.CtClass;
5 | import javassist.CtMethod;
6 | import javassist.NotFoundException;
7 | import javassist.bytecode.CodeAttribute;
8 | import javassist.bytecode.LocalVariableAttribute;
9 | import javassist.bytecode.MethodInfo;
10 | import org.springframework.core.DefaultParameterNameDiscoverer;
11 | import org.springframework.stereotype.Component;
12 |
13 | import java.lang.reflect.Method;
14 | import java.util.ArrayList;
15 | import java.util.List;
16 | import java.util.Objects;
17 |
18 | /**
19 | * Genius
20 | *
21 | **/
22 | @Component
23 | public class MethodDecompose {
24 |
25 |
26 | private static final DefaultParameterNameDiscoverer discoverer = new DefaultParameterNameDiscoverer();
27 | /*
28 | * 利用asm对字节码进行分析,获取方法的参数名
29 | * @param ClassPath 类的全路径
30 | * @param methodName 方法名
31 | */
32 | public List getMethodParamName(String ClassPath,String methodName){
33 | try {
34 | ClassPool classPool = ClassPool.getDefault();
35 | CtClass ctClass = classPool.getOrNull(ClassPath);
36 | CtMethod ctMethod = ctClass.getDeclaredMethod(methodName);
37 | MethodInfo methodInfo = ctMethod.getMethodInfo();
38 | CodeAttribute attribute = methodInfo.getCodeAttribute();
39 | LocalVariableAttribute attr = (LocalVariableAttribute) attribute.getAttribute(LocalVariableAttribute.tag);
40 | List paramNames = new ArrayList<>();
41 | for (int i = 0; i < ctMethod.getParameterTypes().length; i++) {
42 | paramNames.add(attr.variableName(i));
43 | }
44 | return paramNames;
45 | }catch (NotFoundException e) {
46 | throw new RuntimeException("不存在的类");
47 | }
48 | }
49 |
50 | public List getMethodParamNameByDiscover(Method method){
51 | if(method != null){
52 | return List.of(Objects.requireNonNull(discoverer.getParameterNames(method)));
53 | }else{
54 | throw new RuntimeException("不存在的方法");
55 | }
56 | }
57 | }
58 |
--------------------------------------------------------------------------------
/assistant-common/src/main/java/io/github/common/Args.java:
--------------------------------------------------------------------------------
1 | package io.github.common;
2 |
3 | import java.util.List;
4 |
5 | public class Args {
6 |
7 | private final List