我开源了团队内部基于SpringBoot Web快速开发的API脚手架v1.6.0更新

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 什么是 rest-api-spring-boot-starterrest-api-spring-boot-starter 适用于SpringBoot Web API 快速构建让开发人员快速构建统一规范的业务RestFull API 不在去关心一些繁琐。重复工作,而是把重点聚焦到业务。

什么是 rest-api-spring-boot-starter

rest-api-spring-boot-starter 适用于SpringBoot Web API 快速构建让开发人员快速构建统一规范的业务RestFull API 不在去关心一些繁琐。重复工作,而是把重点聚焦到业务。

动机

每次Web API常用功能都需要重新写一遍。或者复制之前的项目代码。于是我封装了这么一个stater

抽出SpringBoot Web API 每个项目必备需要重复写的模块,和必备功能。
并且扩展了我工作中用到的 所有工具库。 解放双手提高开发效率

推荐版本

  • SpringBoot
SpringBoot 2.7.x
AI 代码解读

版本更新

目前最新版本1.6.2 支持功能如下:

  • 支持一键配置自定义RestFull API 统一格式返回
  • 支持RestFull API 错误国际化
  • 支持全局异常处理,全局参数验证处理
  • 业务错误断言工具封装,遵循错误优先返回原则
  • 封装Redis key,value 操作工具类。统一key管理 spring cache缓存实现
  • RestTemplate 封装 POST,GET 请求工具
  • 日志集成。自定义日志路径,按照日志等级分类,支持压缩和文件大小分割。按时间显示
  • 工具库集成 集成了lombok,hutool,commons-lang3,guava。不需要自己单个引入
  • 集成mybatisPlus一键代码生成
  • 日志记录,服务监控,支持日志链路查询。自定义数据源
  • OpenApi3文档集成支持一键配置。支持多种文档和自动配置
  • 生成JWT标准Token和权限认证
  • 接口限流,Ip城市回显
  • HttpUserAgent请求设备工具封装
  • RequestUtil参数解析封装工具

  • GitHub 地址

  • gitee 地址

Web JWT Token 权限支持

JWT Web Token

可以轻松自定义生成自己JWT Web Token.和基于JWT 的userJwtToken

通过userJwtToken你可以轻松生成基于用户登录认证的Token

@Autowired
private UserJwtToken userJwtToken;
@GetMapping("/login")
public Result login() {
   
    UserEntry userEntry = new UserEntry();
    userEntry.setUserId("2");
    userEntry.setUsername("billy");
    userEntry.setHobby("eat");
    userJwtToken.rememberMe=true;
    String token = userJwtToken.createdToken(userEntry.getUserId(), userEntry.getUsername(), userEntry);
    return Result.buildSuccess(token);
}
AI 代码解读

解析token获取用户信息

@GetMapping("/user")
public Result getUser() {
   
    String token = "eyJhbGciOiJIUzI1NiIsInppcCI6IkRFRiJ9.eNqqViouTVKyUkrKzMmpVNJRyiwuBvKMgKyskkwoK7WiQMnK0MzC0tTUwsDEWEeptDi1SMmqGkx7pkBVgTh5ibmpSIZl5CclVQL5qYklSrW1AAAAAP__.8nWRs40LbRTIQBhJ8jVaANPcvsmX0zoLR66R-b2Uc4M";
    String userName=userJwtToken.getUserName(token);
    String userId= userJwtToken.getUserId(token);
    UserEntry userEntry=userJwtToken.parseUserToken(token,UserEntry.class);
    return Result.buildSuccess(userId);
}
AI 代码解读

自定义Token秘钥和签名配置

jwt:
  secret: 123456   # 秘钥 建议加密后秘钥如md5 不要使用明文长度大于6位
  expiration: 86400 # token 过期时间(单位秒 1天后过期)
  token-header: Token  #header token 名称
  remember-me-expiration: 604800  #记住我 token过期时间(单位秒 7天后过期)
  user-sign: true # 是否自定义签名。为true需要实现加密接口。和 配置 jwtCfg注入对应bean
AI 代码解读

自定义签名认证和动态秘钥授权需要实现UserSign接口配置UserJwtConfig配置类注入自定义签名bean

package cn.soboys.superaide.config;

import cn.soboys.restapispringbootstarter.authorization.UserSign;
import io.jsonwebtoken.SignatureAlgorithm;

/**
 * @author 公众号 程序员三时
 * @version 1.0
 * @date 2023/7/16 00:20
 * @webSite https://github.com/coder-amiao
 */
public class MyUserSign implements UserSign {
   

    @Override
    public SignatureAlgorithm sign() {
   
        return SignatureAlgorithm.HS256;
    }

    @Override
    public String AuthKey() {
   
        return null;
    }
}
AI 代码解读

AuthKey返回null时候会使用你在属性文件配置的秘钥。没有会使用默认的

package cn.soboys.superaide.config;

import cn.soboys.restapispringbootstarter.authorization.*;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;

/**
 * @author 公众号 程序员三时
 * @version 1.0
 * @date 2023/7/15 09:49
 * @webSite https://github.com/coder-amiao
 * 用户jwt token生成配置
 */
@Configuration
public class UserJwtConfig {
   


    @Bean
    public UserSign MyUserSign() {
   
        return new MyUserSign();
    }


    @Bean
    public UserJwtToken userJwtToken(UserSign MyUserSign) {
   
        UserJwtToken userJwtToken = new UserJwtToken();
        userJwtToken.setUserSign(MyUserSign);
        return userJwtToken;
    }
}
AI 代码解读

权限认证

基于JWT Web Token 也帮你封装了权限登录认证。 你只需要在属性文件配置开启即可。

jwt:
 authorization:
    has-authorization: true
    includes-url: /user    # 需要认证请求 多个用逗号隔开
    excludes-url: /login,/register/**      # 配置无需认证的
AI 代码解读

全局帮你自动处理Token过期异常。和错误异常你只需要在heard中配置你自己的Token就行

{
   
    "success": false,
    "code": "401",
    "msg": "未授权 ",
    "requestId": "9a3ytEtOX0UuojSaA2LD",
    "timestamp": "2023-07-17 17:08:05",
    "data": null
}
AI 代码解读

如果需要自定义自己认证授权逻辑,实现LoginAuthorization接口即可
并且在UserJwtConfig配置类中注入对应LoginAuthorization bean

如:

package cn.soboys.superaide.config;

import cn.soboys.restapispringbootstarter.Assert;
import cn.soboys.restapispringbootstarter.HttpStatus;
import cn.soboys.restapispringbootstarter.authorization.LoginAuthorization;
import cn.soboys.restapispringbootstarter.authorization.UserJwtToken;
import org.dromara.hutool.core.text.StrUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @author 公众号 程序员三时
 * @version 1.0
 * @date 2023/7/16 11:00
 * @webSite https://github.com/coder-amiao
 */
@Component
public class MyLoginAuthorization implements LoginAuthorization {
   
@Autowired
private UserJwtToken userJwtToken;

@Override
public Boolean authorization(HttpServletRequest request, HttpServletResponse response, Object handler) {
   
    String token = request.getHeader("Token");

    Assert.isFalse(StrUtil.isEmpty(token),HttpStatus.UNAUTHORIZED);
    String userId = userJwtToken.getUserId(token);  //验证token有效合法性。

    //其他数据库 或者业务操作
    return true;
}
}
AI 代码解读

在配置类中注入bean

package cn.soboys.superaide.config;

import cn.soboys.restapispringbootstarter.authorization.*;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;

/**
 * @author 公众号 程序员三时
 * @version 1.0
 * @date 2023/7/15 09:49
 * @webSite https://github.com/coder-amiao
 * 用户jwt token生成配置
 */
@Configuration
public class UserJwtConfig {
   


    @Bean
    public UserSign MyUserSign() {
   
        return new MyUserSign();
    }

    @Bean
    @Primary
    public LoginAuthorization loginAuthorizationSubject() {
   
        return new MyLoginAuthorization();
    }


    @Bean
    public UserJwtToken userJwtToken(UserSign MyUserSign) {
   
        UserJwtToken userJwtToken = new UserJwtToken();
        userJwtToken.setUserSign(MyUserSign);
        return userJwtToken;
    }
}
AI 代码解读

三方权限认证框架

基于JWT Web Token也可以很轻松集成Shiro 或者是。Spring Security等其他第三权限框架

当然后续版本我会把权限认证独立出来一个完整轻量级权限框架项目。如:
通过注解@hasPerm,@hasRole,@hasAnyPerm,@hasAnyRoles
轻松实现相对复杂的权限认证。

后续更新

通用业务

在我们聚焦项目开发时候,总是会有一些相对公共独立的第三方业务模块。
如:三方登录,三方支付,消息推送,资源上传
后续我会持续集成。通用业务生态。 实现真的解放生产力。自由组合。

有任何编程问题。

关注公众号,程序员三时 持续输出优质内容 希望给你带来一点启发和帮助

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
打赏
0
0
0
0
3
分享
相关文章
20.6K star!Excel级交互体验!这款开源Web表格神器绝了!
Handsontable 是一款功能强大的 JavaScript 数据表格组件,提供类 Excel 的交互体验。支持实时协作、数据绑定、公式计算等企业级功能,可轻松集成到 React/Vue/Angular 等主流框架。
66 11
69.9K star!这个API调试神器让你告别Postman,开源免费真香!
Hoppscotch 是一款专为开发者打造的轻量级API调试工具,凭借其极简的界面设计和强大的功能支持,已成为GitHub上最受欢迎的API开发工具之一。无需安装客户端,打开浏览器即可享受媲美Postman的专业体验!
Deep Research Web UI:开源版Deep Research!接入DeepSeek一键生成深度研究报告,可视化检索过程
Deep Research Web UI 是一款开源的 AI 研究助手工具,通过 AI 驱动的迭代搜索和多语言支持,帮助用户高效进行深度研究,并以树状结构可视化研究过程,支持导出为 Markdown 或 PDF 格式。
225 9
Deep Research Web UI:开源版Deep Research!接入DeepSeek一键生成深度研究报告,可视化检索过程
找不到类似 Docker Desktop 的 Web 管理界面?试试这些开源方案
Docker Desktop 是本地容器化开发的利器,但存在无法通过 Web 远程管理、跨平台体验不一致等问题。为此,推荐几款轻量级、可 Web 化管理的 Docker 工具:Portainer 功能全面,适合企业级运维;CasaOS 集成应用商店和 NAS 功能,适合家庭/个人开发环境;Websoft9 提供预集成环境,新手友好。这些工具能有效提升容器管理效率,满足不同场景需求。
64 3
|
2月前
|
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
63 1
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
零基础构建开源项目OpenIM桌面应用和pc web- Electron篇
OpenIM 为开发者提供开源即时通讯 SDK,作为 Twilio、Sendbird 等云服务的替代方案。借助 OpenIM,开发者可以构建安全可靠的即时通讯应用,如 WeChat、Zoom、Slack 等。 本仓库基于开源版 OpenIM SDK 开发,提供了一款基于 Electron 的即时通讯应用。您可以使用此应用程序作为 OpenIM SDK 的参考实现。本项目同时引用了 @openim/electron-client-sdk 和 @openim/wasm-client-sdk,分别为 Electron 版本和 Web 版本的 SDK,可以同时构建 PC Web 程序和桌面应用(Wi
103 2
百聆:集成Deepseek API及语音技术的开源AI语音对话助手,实时交互延迟低至800ms
百聆是一款开源的AI语音对话助手,结合ASR、VAD、LLM和TTS技术,提供低延迟、高质量的语音对话体验,适用于边缘设备和低资源环境。
1383 5
百聆:集成Deepseek API及语音技术的开源AI语音对话助手,实时交互延迟低至800ms
Gemini Coder:基于 Google Gemini API 的开源 Web 应用生成工具,支持实时编辑和预览
Gemini Coder 是一款基于 Google Gemini API 的 AI 应用生成工具,支持通过文本描述快速生成代码,并提供实时代码编辑和预览功能,简化开发流程。
193 38
Gemini Coder:基于 Google Gemini API 的开源 Web 应用生成工具,支持实时编辑和预览
DeepSeek Engineer:集成 DeepSeek API 的开源 AI 编程助手,支持文件读取、编辑并生成结构化响应
DeepSeek Engineer 是一款开源AI编程助手,通过命令行界面处理用户对话并生成结构化JSON,支持文件操作和代码生成。
958 6
DeepSeek Engineer:集成 DeepSeek API 的开源 AI 编程助手,支持文件读取、编辑并生成结构化响应
AgentScope:阿里开源多智能体低代码开发平台,支持一键导出源码、多种模型API和本地模型部署
AgentScope是阿里巴巴集团开源的多智能体开发平台,旨在帮助开发者轻松构建和部署多智能体应用。该平台提供分布式支持,内置多种模型API和本地模型部署选项,支持多模态数据处理。
972 4
AgentScope:阿里开源多智能体低代码开发平台,支持一键导出源码、多种模型API和本地模型部署

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等