这 9 个 Java 开源项目 yyds
共 18339字,需浏览 37分钟
·
2021-11-23 22:59
整理:元人部落
在开源中国里,不知道大家有没有留意到一个Java开源组织——Dromara?这个组织是由 Apache ShenYu(前身是Soul网关)的作者创立,多位 Java 开源作者参与的一个Java开源组织。
在开源中国社区,很多 Java 开源作者都是各自为战,独立运营项目。Domara 组织的诞生就是为了联合 Java 开源的力量,共建社区,资源共享,共同推行中国Java开源事业的发展。
1. Sa-Token
Sa-Token 是一个轻量级 Java 权限认证框架,主要解决:登录认证、权限认证、Session会话、单点登录、OAuth2.0、微服务网关鉴权等一系列权限相关问题。Sa-Token 的 API 设计非常简单,有多简单呢?以登录认证为例,你只需要:搜索公众号互联网架构师复“2T”,送你一份惊喜礼包。
// 在登录时写入当前会话的账号id
StpUtil.login(10001);
// 然后在需要校验登录处调用以下方法:
// 如果当前会话未登录,这句代码会抛出 `NotLoginException` 异常
StpUtil.checkLogin();
没错,在 Sa-Token 中,登录认证就是如此简单,不需要任何的复杂前置工作,只需这一行简单的API调用,就可以完成会话登录认证!
当你受够 Shiro、SpringSecurity 等框架的三拜九叩之后,你就会明白,相对于这些传统老牌框架,Sa-Token 的 API 设计是多么的简单、优雅!
@SaCheckPermission("user:add")
@RequestMapping("/user/insert")
public String insert(SysUser user) {
// ...
return "用户增加";
}
// 使账号id为 10001 的会话强制注销登录
StpUtil.logoutByLoginId(10001);
StpUtil.login(10001); // 标记当前会话登录的账号id
StpUtil.getLoginId(); // 获取当前会话登录的账号id
StpUtil.isLogin(); // 获取当前会话是否已经登录, 返回true或false
StpUtil.logout(); // 当前会话注销登录
StpUtil.logoutByLoginId(10001); // 让账号为10001的会话注销登录(踢人下线)
StpUtil.hasRole("super-admin"); // 查询当前账号是否含有指定角色标识, 返回true或false
StpUtil.hasPermission("user:add"); // 查询当前账号是否含有指定权限, 返回true或false
StpUtil.getSession(); // 获取当前账号id的Session
StpUtil.getSessionByLoginId(10001); // 获取账号id为10001的Session
StpUtil.getTokenValueByLoginId(10001); // 获取账号id为10001的token令牌值
StpUtil.login(10001, "PC"); // 指定设备标识登录,常用于“同端互斥登录”
StpUtil.logoutByLoginId(10001, "PC"); // 指定设备标识进行强制注销 (不同端不受影响)
StpUtil.openSafe(120); // 在当前会话开启二级认证,有效期为120秒
StpUtil.checkSafe(); // 校验当前会话是否处于二级认证有效期内,校验失败会抛出异常
StpUtil.switchTo(10044); // 将当前会话身份临时切换为其它账号
即使不运行测试,相信您也能意会到绝大多数 API 的用法。想要了解更多请参考:https://gitee.com/dromara/sa-token。
一款极大程度解放你的 HTTP 接入工作的强大 HTTP 客户端框架。HTTP 协议很复杂吗?那是因为你还没有使用过 Forest,虽然业内有很多其他优秀的HTTP 客户端,但是你错过了 Forest,将会错过一大片优雅美丽的森林。
包括 URL、Header、Body 等等参数都能依靠 Java 注解来声明。这里就举一个高德地图的栗子,来看看 Forest 是如何优雅的声明 HTTP 请求接口的:
/**
* 高德地图服务客户端接口
*/
@BaseRequest(baseURL = "http://ditu.amap.com")
public interface Amap {
/**
* 根据经纬度获取详细地址
* @param longitude 经度
* @param latitude 纬度
* @return 详细地址信息
*/
@Get("/service/regeo")
Map getLocation(@Query("longitude") String longitude, @Query("latitude") String latitude);
}
......
Amap amap = Forest.client(Amap.class);
// 发送请求查询经纬度
Map locationInfo = amap.getLocation("32.1242832", "56.3290434");
自动 JSON 和 XML 转换
// 直接将 MyUserInfo 转换成 JSON
// 将服务端响应返回的 JSON 数据转换成 Result<Boolean> 类对象
@Post("http://localhost:8080/user")
Result<Booelean> createUser(@JSONBody MyUserInfo user);
3. LiteFlow
一款超轻量,快速,稳定,可编排的组件式流程引擎/规则引擎。
解耦复杂系统的神器!如果你正在为设计一个复杂系统感到头痛,那么 LiteFlow 是你不二的选择,超低的学习成本,强大的编排功能,让你的系统变得更优雅!
官方网站:https://yomahub.com/liteflow
Gitee托管仓库:https://gitee.com/dromara/liteFlow
Github托管仓库:https://github.com/dromara/liteflow
Liteflow 为解耦复杂逻辑而生,如果你要对复杂业务逻辑进行新写或者重构,用 liteflow 最合适不过。它是一个轻量,快速的组件式流程引擎框架,组件编排,帮助解耦业务代码,让每一个业务片段都是一个组件。
使用 Liteflow,你需要去把复杂的业务逻辑按代码片段拆分成一个个小组件,并定义一个规则流程配置。这样,所有的组件,就能按照你的规则配置去进行复杂的流转。同时 Liteflow 支持规则文件的热加载,即时完成修改生效。并提供多种持久化规则的方式的扩展。
使用 LiteFLow,三大核心概念是组件,规则和上下文。
你需要这么像这样去定义你的组件:
//这里普通组件
@LiteflowComponent(id = "a", name = "组件A描述")
public class ACmp extends NodeComponent {
@Override
public void process() {
//do your business
}
}
//这是条件组件
@LiteflowComponent(id = "b", name = "组件B描述")
public class BCondCmp extends NodeCondComponent {
@Override
public String processCond() {
//do your business
return "e";
}
}
然后去定义你的规则,LiteFlow支持 XML,yml,JSON 三种格式。这里以 XML 形式为例:搜索公众号互联网架构师复“2T”,送你一份惊喜礼包。
<?xml version="1.0" encoding="UTF-8"?>
<flow>
<chain name="chain1">
<then value="a,b(c|d|e)"/> <!-- c为路由组件,用来路由到c,d,e -->
<then value="sub_chain"/> <!-- 子流程 -->
</chain>
<chain name="sub_chain">
<when value="f,g,h"/> <!-- when代表并行 -->
<then value="j,k" /> <!-- then代表串行 -->
</chain>
</flow>
这样你的系统就会按照规则文件定义的方式,去执行你的业务组件。是不是很简单?
@LiteflowComponent(id = "a", name = "组件A描述")
public class ACmp extends NodeComponent {
@Override
public void process() {
Slot slot = this.getSlot();
//通过对slot的getData,setData,或者存取你自己扩展的slot属性
}
}
LiteFlow 还支持 2 种脚本语言的接入,目前支持 Groovy 和 QLExpress 两种脚本语言。你可以在 xml/yml/json 定义脚本,以下以 XML 为例:
<?xml version="1.0" encoding="UTF-8"?>
<flow>
<nodes>
<node id="s1" name="普通脚本" type="script">
<![CDATA[
def a=3;
def b=2;
slot.setData("s1",a*b);
]]>
</node>
<node id="s2" name="条件脚本" type="cond_script">
<![CDATA[
count = slot.getData("count");
if(count > 100){
return "a";
}else{
return "b";
}
]]>
</node>
</nodes>
<chain name="chain1">
<then value="a,b,c,s1"/>
</chain>
<chain name="chain2">
<then value="d,s2(a|b)"/>
</chain>
</flow>
有了脚本语言的支持,连业务代码是不是都可以热部署了?香不香?
4. JPom
一款简而轻的低侵入式在线构建、自动部署、日常运维、项目监控软件。中小公司团队 DevOps 的福音!轻量且强大,你不试试?
市面上有很许多 DevOps 软件但是这些软件基本都会是难上手,重依赖。Jpom 则是针对中小公司或者团队设计的一款低侵入,轻依赖的一款轻量级的 DevOps 软件。
项目主要功能及特点:
创建、修改、删除项目、Jar 包管理; 实时查看控制台日志、备份日志、删除日志、导出日志; 在线构建项目发布项目一键搞定; 多节点管理、多节点自动分发; 在线 SSH 终端,并且有终端日志和禁用命令; 实时监控项目状态异常自动报警; CPU、内存监控、导出堆栈信息、查看项目进程端口、服务器状态监控; 多用户管理,用户项目权限独立(上传、删除权限可控制),完善的操作日志; 系统路径白名单模式,杜绝用户误操作系统文件; 在线管理 Nginx 配置文件、SSL 证书文件。
一键安装(Linux)(推荐)
插件端
如果服务端也需要被管理,在服务端上也需要安装插件端。安装的路径位于执行命令目录(数据、日志存放目录默认位于安装路径,如需要修改参考配置文件:extConfig.yml )。
yum install -y wget && wget -O install.sh https://dromara.gitee.io/jpom/docs/install.sh && bash install.sh Agent
备用地址 yum install -y wget && wget -O install.sh https://cdn.jsdelivr.net/gh/dromara/Jpom/docs/install.sh && bash install.sh Agent
支持自动安装 JDK 环境 yum install -y wget && wget -O install.sh https://dromara.gitee.io/jpom/docs/install.sh && bash install.sh Agent jdk
启动成功后,插件端的端口为 2123。
安装的路径位于执行命令目录(数据、日志存放目录默认位于安装路径,如需要修改参考配置文件:extConfig.yml )。
yum install -y wget && wget -O install.sh https://dromara.gitee.io/jpom/docs/install.sh && bash install.sh Server
备用地址 yum install -y wget && wget -O install.sh https://cdn.jsdelivr.net/gh/dromara/Jpom/docs/install.sh && bash install.sh Server
支持自动安装 JDK 环境。
yum install -y wget && wget -O install.sh https://dromara.gitee.io/jpom/docs/install.sh && bash install.sh Server jdk
支持自动安装 JDK 和 Maven 环境。 yum install -y wget && wget -O install.sh https://dromara.gitee.io/jpom/docs/install.sh && bash install.sh Server jdk+mvn
启动成功后,服务端的端口为 2122 访问管理页面。例如 http://localhost:2122/
5. Cubic
兼容性:整体监控不管你是 IDC、ECS、Docker 部署,都可完美兼容; 易用:无需任何配置,开箱即用,基于 agent 无侵入接入,升级应用端无感知; 强大:支持对应用的基础监控、堆栈监控、线程池监控等等; 高扩展:提供良好的扩展接口,给你自主选择。
6. Sureness
丢掉 Shiro 吧,也别再用 Spring Security了。简单易用多语言多框架支持,基于 RESTAPI 的强大国产鉴权框架,效率神器!
于是乎 Sureness 诞生了,我们希望能解决这些问题。提供一个面向 REST API、无框架依赖、可以动态修改权限、多认证策略、更快速度、易用易扩展的认证鉴权框架。
面向 REST API 的认证鉴权,基于 RBAC(用户-角色-资源)主要关注于对 API 的安全保护。无特定 Web 框架依赖,开箱即用(已有 SpringBoot、Quarkus、Javalin、Ktor、Micronaut、Jfinal、Solon 等集成样例); 支持动态修改权限配置(动态修改配置每个 API 的访问权限)
支持 Websocket 、主流 HTTP 容器 Servlet、JAX-RS、Spring Reactive;支持多种认证策略 JWT、Basic Auth、Digest Auth ... 可扩展自定义认证方式; 基于改进的字典匹配树拥有的高性能;搜索公众号互联网架构师复“2T”,送你一份惊喜礼包。 良好的扩展接口、样例和文档,帮助急速理解、扩展与使用 Sureness 的低配置; 易扩展,不耦合其他框架,希望能对系统多场景快速安全的保护。
原生支持样例:
[x] Sureness 集成 Spring Boot 样例(配置文件方案)sample-bootstrap [x] Sureness 集成 Spring Boot 样例(数据库方案)sample-tom [x] Sureness 集成 Quarkus 样例 sample-quarkus [x] Sureness 集成 Javalin 样例 sample-javalin [x] Sureness 集成 Ktor 样例 sample-ktor [x] Sureness 集成 Spring Webflux 样例 sample-spring-webflux [x] Sureness 集成 Micronau t样例 sample-micronaut [x] Sureness 集成 MicroProfile 样例 sample-microProfile [x] Sureness 集成 Jfinal 样例 sample-jfinal [x] Sureness 集成 Solon 样例 sample-solon [x] Sureness 集成 Spring Gateway 样例 sample-spring-gateway [x] Sureness 集成 Zuul 样例 sample-zuul [x] Sureness 集成 Session 样例 sureness-session [x] Sureness 集成分布式缓存 Session 样例 sureness-redis-session [x] More samples todo
7. TLog
使用后你的每行日志会变成以下格式:
最简单的例子:
public void simpleDemo() throws Exception {
//合成器
ImageCombiner combiner = new ImageCombiner("http://xxx.com/image/bg.jpg", OutputFormat.JPG);
//加图片元素
combiner.addImageElement("http://xxx.com/image/product.png", 0, 300)
.setAlpha(.8 f) //透明度(0.0~1.0)
.setRotate(45) //旋转(0~360)
.setBlur(20); //高斯模糊(1~100);
//加文本元素
combiner.addTextElement("周末大放送", 0, 150, 1400)
.setCenter(true) //居中绘制(会忽略x坐标,改为自动计算)
.setColor(Color.Red) //颜色
//执行图片合并
combiner.combine();
//可以获取流(并上传oss等)
InputStream is = combiner.getCombinedImageStream();
//也可以保存到本地
combiner.save("d://image.jpg");
想要了解更多请参考:https://gitee.com/dromara/image-combiner。
9. MaxKey
MaxKey 单点登录认证系统是业界领先的企业级 IAM 身份管理和认证框架,产品化程度很高,多家知名公司的选择!
官方网站:https://www.maxkey.top/
Gitee托管仓库:https://gitee.com/dromara/MaxKey
Github托管仓库:https://github.com/dromara/MaxKey
提供标准的认证接口以便于其他应用集成 SSO,安全的移动接入,安全的 API、第三方认证和互联网认证的整合; 提供用户生命周期管理,支持 SCIM 2 协议,基于 Apache Kafka 代理,通过连接器(Connector)实现身份供给同步; 认证中心具有平台无关性、环境多样性。支持 Web、手机、移动设备等。如 Apple iOS、Andriod 等。将认证能力从 B/S 到移动应用全面覆盖; 多种认证机制并存,各应用系统可保留原有认证机制,同时集成认证中心的认证;应用具有高度独立性,不依赖认证中心,又可用使用认证中心的认证,实现单点登录; 基于 Java EE 平台,采用 Spring、MySQL、Tomcat、Redis、Apache Kafka 等开源技术,微服务架构,扩展性强; 开源、安全、自主可控,许可证 Apache 2.0 License & MaxKey 版权声明。
最后
感谢您的阅读,也欢迎您发表关于这篇文章的任何建议,关注我,技术不迷茫!小编到你上高速。
正文结束
1.不认命,从10年流水线工人,到谷歌上班的程序媛,一位湖南妹子的励志故事
5.37岁程序员被裁,120天没找到工作,无奈去小公司,结果懵了...