我开源了团队内部基于SpringBoot Web快速开发的API脚手架v1.6.0更新
什么是 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
版本更新
目前最新版本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参数解析封装工具
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);
}
解析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);
}
自定义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
自定义签名认证和动态秘钥授权需要实现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;
}
}
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;
}
}
权限认证
基于JWT Web Token 也帮你封装了权限登录认证。 你只需要在属性文件配置开启即可。
jwt:
authorization:
has-authorization: true
includes-url: /user # 需要认证请求 多个用逗号隔开
excludes-url: /login,/register/** # 配置无需认证的
全局帮你自动处理Token过期异常。和错误异常你只需要在heard中配置你自己的Token就行
{
"success": false,
"code": "401",
"msg": "未授权 ",
"requestId": "9a3ytEtOX0UuojSaA2LD",
"timestamp": "2023-07-17 17:08:05",
"data": null
}
如果需要自定义自己认证授权逻辑,实现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;
}
}
在配置类中注入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;
}
}
三方权限认证框架
基于JWT Web Token也可以很轻松集成Shiro 或者是。Spring Security等其他第三权限框架
当然后续版本我会把权限认证独立出来一个完整轻量级权限框架项目。如:
通过注解@hasPerm,@hasRole,@hasAnyPerm,@hasAnyRoles
轻松实现相对复杂的权限认证。
后续更新
通用业务
在我们聚焦项目开发时候,总是会有一些相对公共独立的第三方业务模块。
如:三方登录,三方支付,消息推送,资源上传
后续我会持续集成。通用业务生态。 实现真的解放生产力。自由组合。
有任何编程问题。
关注公众号,程序员三时 持续输出优质内容 希望给你带来一点启发和帮助
我开源了团队内部基于SpringBoot Web快速开发的API脚手架v1.6.0更新的更多相关文章
- Spring Boot 是 Spring 的一套快速配置脚手架,可以基于Spring Boot 快速开发单个微服务
Spring Boot 是 Spring 的一套快速配置脚手架,可以基于Spring Boot 快速开发单个微服务,Spring Cloud是一个基于Spring Boot实现的云应用开发工具:Spr ...
- JAVA WEB快速入门之从编写一个基于SpringBoot+Mybatis快速创建的REST API项目了解SpringBoot、SpringMVC REST API、Mybatis等相关知识
JAVA WEB快速入门系列之前的相关文章如下:(文章全部本人[梦在旅途原创],文中内容可能部份图片.代码参照网上资源) 第一篇:JAVA WEB快速入门之环境搭建 第二篇:JAVA WEB快速入门之 ...
- 5款最好用的开源Web快速开发工具
1.Aptana Studio Aptana是一个用于HTML,CSS和JavaScript的网站开发工具.目前在社区里有成千上万的人在开发Aptana的插件. Apatana Studio官网:ht ...
- JEECG-Boot 项目介绍——基于代码生成器的快速开发平台(Springboot前后端分离)
Jeecg-Boot 是一款基于代码生成器的智能开发平台!采用前后端分离架构:SpringBoot,Mybatis,Shiro,JWT,Vue&Ant Design.强大的代码生成器让前端和后 ...
- 如何提高码农产量,基于java的web快速开发平台之自定义表单开发随笔
老板 :下班前一定写完? 程序猿:可以,下班前能一定给! 第二天早上上班~~~ 老板:这都第二天了,怎么没写完? 程序猿:我还没有下班呢! 哎!程序猿的痛啊 公司上线的项目有不少销售记录表,又是报价单 ...
- 基于代码生成器的快速开发平台 JEECG
JEECG是一款基于代码生成器的J2EE快速开发平台,开源界“小普元”超越传统商业企业级开发平台.引领新的开发模式(Online Coding模式(在线开发)->代码生成器模式->手工ME ...
- 基于MINA框架快速开发网络应用程序
1.MINA框架简介 MINA(Multipurpose Infrastructure for Network Applications)是用于开发高性能和高可用性的网络应用程序的基础框架.通过使用M ...
- 使用springBoot进行快速开发
springBoot项目是spring的一个子项目,使用约定由于配置的思想省去了以往在开发过程中许多的配置工作(其实使用springBoot并不是零配置,只是使用了注解完全省去了XML文件的配置),达 ...
- 玩转 SpringBoot 2 快速搭建 | RESTful Api 篇
概述 RESTful 是一种架构风格,任何符合 RESTful 风格的架构,我们都可以称之为 RESTful 架构.我们常说的 RESTful Api 是符合 RESTful 原则和约束的 HTTP ...
- .NETCore 基于 dbfirst 体验快速开发项目
简介 今天出场是进化了多年的生成器工具,根据数据库结构(表.视图.存储过程.外键.各种类型.备注)快速生成一个项目,并自带后台管理系统.篇幅有限本文只讲解快速开发的使用过程,具体开发中的细节日后有空再 ...
随机推荐
- 深度学习-07(图像分类、常用数据集、利用CNN实现图像分类、图像分类优化)
文章目录 深度学习-07(PaddlePaddle图像分类) 图像分类概述 概述 什么是图像分类 图像分类粒度 图像分类发展历程 图像分类问题的挑战 常用数据集介绍 MNIST数据集 CIFAR10数 ...
- 小米商城主页展示HTML+CSS
大佬们呀,花了好几天的时间总算是看着页面展示可以了,求赐教! 小米商城主页,对大佬来说肯定简单爆了,我抄写了好久呀,总是有一点点的小问题,还搞不明白 主要是一个静态的小米商城页面,HTML前端代码不复 ...
- 粘包/拆包问题一直都存在,只是到TCP就拆不动了。
OSI open-system-Interconnection TCP/IP 5层协议栈 应用层和操作系统的边界是 系统调用 ,对应到网络编程是socket api TCP/UDP 概况 TCP粘包问 ...
- BUG解决-Vscode/Sublime C++ 打印中文乱码问题
#include <iostream> using namespace std; #ifdef _WIN32 #include <windows.h> #endif int m ...
- 【实践篇】教你玩转JWT认证---从一个优惠券聊起
引言 最近面试过程中,无意中跟候选人聊到了JWT相关的东西,也就联想到我自己关于JWT落地过的那些项目. 关于JWT,可以说是分布式系统下的一个利器,我在我的很多项目实践中,认证系统的第一选择都是JW ...
- 音容笑貌,两臻佳妙,人工智能AI换脸(deepfake)技术复刻《卡萨布兰卡》名场面(Python3.10)
影史经典<卡萨布兰卡>是大家耳熟能详的传世名作,那一首壮怀激烈,激奋昂扬的马赛曲,应当是通片最为激动人心的经典桥段了,本次我们基于faceswap和so-vits库让AI川普复刻美国演员保 ...
- SpringBoot配置文件加载
Spring Boot 配置文件加载是通过 Spring Boot 的自动配置机制实现的,它可以根据不同的环境加载不同的配置文件,包括 application.properties.applicati ...
- GitHub 的项目徽章
GitHub 项目的 README.md 中可以添加徽章(Badge)对项目进行标记和说明,这些好看的小图标不仅简洁美观,而且还包含了清晰易读的信息. GitHub 项目的徽标可以参考 https:/ ...
- 手把手教你如何在 Linux 上源码安装最新版本 R
如果你使用的 Linux 系统 GCC 版本太低,又没有 root 权限(即使有 root 权限又担心升级 GCC 带来的风险):同时你又不想额外多安装多一个 Anaconda 或者 Minicond ...
- 自然语言处理(NLP) - 前预训练时代的自监督学习
前预训练时代的自监督学习自回归.自编码预训练的前世 神经网络(Neural Network, NN) 损失函数,度量神经网络的预测结果和真实结果相差多少 平方差损失(欧式距离角度)预测概率分部和实际标 ...