Coder Social home page Coder Social logo

ballcat-projects / ballcat Goto Github PK

View Code? Open in Web Editor NEW
1.4K 30.0 294.0 12.64 MB

😸一个快速开发脚手架,快速搭建企业级后台管理系统,并提供多种便捷starter进行功能扩展。主要功能包括前后台用户分离,菜单权限,数据权限,定时任务,访问日志,操作日志,异常日志,统一异常处理,XSS过滤,SQL防注入,国际化 等多种功能

Home Page: http://docs.ballcat.org

License: Apache License 2.0

Java 99.99% Shell 0.01%
security ouath2 code-generator upms spring spring-boot ant-design vue websocket i18n

ballcat's People

Contributors

721806280 avatar alickx avatar azewz avatar canpowerzhu avatar chengzichen avatar dependabot[bot] avatar elliotliu avatar evil0th avatar forqxy avatar gaodongshuai avatar hccake avatar heart-flowing avatar huyuanzhi avatar huyuanzhi666 avatar javalionli avatar likaiwen95 avatar lingting avatar lishangbu avatar mobaijun avatar nothingp avatar schilings avatar smufan avatar snailclimb avatar springboot4 avatar tgtang avatar whace avatar xiaoashuo avatar yiyangduncuo avatar yuan67-top avatar zorohu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ballcat's Issues

ODIC 支持

  • 利用 oauth2Login() 授权码登录获得单点登录能力。
  • 登录后子系统向授权中心注册,登出时直接向授权中心发起登出,授权中心调用各注册的子系统进行统一登出

【意见收集】代码结构调整

考虑后续将此仓库再进行一次拆分与结构调整:

1. 将所有的业务模块迁移到独立仓库

新建一个业务仓库 ballcat-business,将 ballcat-system、ballcat-log 、ballcat-i18n 等等业务模块迁移过去。

2. 此模块只保留与业务无关的功能模块和自动配置模块

功能模块:ballcat-framework 和 自动配置模块:ballcat-starter

  • 将 ballcat-common 和 ballcat-extend 的相关模块整合为 ballcat-framework 模块
  • 将 ballcat-starter 中的所有模块进行拆分,功能代码迁移到 ballcat-framework 模块中,starter 中仅保留自动配置类。
  • 功能模块命名精简,如 ballcat-common-websocket 迁移后将改为 ballcat-websocket

3. 依赖管理模块拆分

目前的 ballcat-dependency 模块中,既管理了 ballcat 本身项目的相关依赖,又管理了 ballcat 所依赖的第三方依赖,考虑拆分为 ballcat-bom 和 ballcat-dependency,一个管理 ballcat 自身,一个管理第三方依赖

由于涉及到的改动较大,所以预计在升级 spring-boot 3.x 时处理,来个大版本更新

在 2.0 版本进行模块改动
在 3.0 版本进行升级 springboot3.x + java17,正好可以版本对齐

如果大家对模块拆分有更好的建议欢迎在此指出,集思广益

group id 和 包名需要统一整改

剔除 hccake 的个人名称,目前由于 ballcat.com 域名已经被他人购买
所以考虑替换为 cn.ballcat 或者 org.ballcat

ballcat-extend-dingtalk 使用无法对接钉钉

https://github.com/ballcat-projects/ballcat/tree/master/ballcat-extends/ballcat-extend-dingtalk 我这边测试了一下。 貌似对接钉钉报了问题:

具体测试方法如下:
@GetMapping(value = "/text") public Object sendTextMessage() { DingTalkTextMessage text = new DingTalkTextMessage(); text.setContent("Hello text content."); return dingTalkSender.sendMessage(text); }
返回报错信息如下:
{ "code": 310000, "message": "sign not match", "response": "{\"errcode\":310000,\"errmsg\":\"sign not match\"}", "success": false }

之后,我修订钉钉机器人安全设置,改为IP段控制,这里配置成自己的IP地址段,
再次进行测试,报如下错误:
{ "code": 300001, "message": "param error", "response": "{\"errcode\":300001,\"errmsg\":\"param error\"}", "success": false }
麻烦看看是否有问题?

多数据源会支持吗?

公司原有模块是oracle,能不能系统管理这部分用mysql,然后提供多一个数据源连到oracle

多语言插件

在保留原始功能的情况下,简单的引入多语言

[BUG] SprinUtils通过三方jar包的方式引入,导致没有注入spirng容器

由于SpringBoot默认扫描bean机制的问题导致 你的SpringUtils是没有被扫描到注入的 根本执行不了ApplicationContextAware的生命周期方法.

解决办法

  1. 在scanBasePackages中加入该utils的包名例如:@SpringBootApplication(scanBasePackages = {"com.your.package.*", "com.hccake.ballcat.common.util"})
  2. 在spirng生命周期的方法中,必须在bean实例化之前 设置该bean 例如hutool: spring.factories中加入自动配置
  3. 因为项目中引入了hutool,干脆在SpringUtils中直接封装hutool的工具类

个人觉得封装hutool的工具类代价最小,如果可以我愿意帮你解决这个问题

是否支持pg数据库

目前pg数据库流行度大增,已经使用得越来越广泛,ballcat是否对pg有支持

SQL脚本缺失

sys_lov 等三张表的建表语句漏了,要补到文件里面

PageParam 优化

1. 支持 sort 字段的表别名设置

现在的正则控制导致无法拼接 order by a.id desc 这样的排序 sql。

考虑优化:
- 放开 sql 注入控制的正则,允许带一个 . 的排序字段入参
- 或者多一个入参属性用于指定排序字段对应的表别名

2. 支持多列排序

支持 sql 拼接 order by a.id desc, a.name asc 这种多列排序

PasswordEncoder 优化

用户密码修改时使用的加密方式不应该使用 PasswordUtils 中提供的默认 PasswordEncoder。

应该从容器中获取,以便保持和 auth 中的一致,也方便用户替换自己的 PasswordEncoder。

common-security

  • 废弃 Spring Security OAuth2 中提供的 @EnableResourceServer,转而使用 security 5.x 的 oauth2ResourceServer() 。
  • 抽取公用 security 包,提供默认的资源服务器 WebSecurityConfigurerAdapter,方便各服务复用
  • 迁移一些基础 domain 和 util

LambdaAliasQueryWrapperX 别名在 and 条件下失效

实体定义:@TableAlias("si")
代码片段

LambdaAliasQueryWrapperX wrapper = WrappersX.lambdaAliasQueryX(SheetInfo.class);
wrapper.eqIfPresent(SheetInfo::getEditorBy, dto.getSysEditId()).eqIfPresent(SheetInfo::getState, dto.getState())
.and(StrUtil.isNotBlank(dto.getSearch()), w -> {
w.like(SheetInfo::getNo, dto.getSearch()).or().inSql(SheetInfo::getContractId,
String.format(
"select id from contract_info where deleted=0 and company_name regexp '%s'",
dto.getSearch()));
}).orderByDesc(SheetInfo::getMainId);

输出sql

select si.*,t1.name from sheet_info si
join ky_app.contract_info t1 on t1.deleted = 0 and t1.id = si.contract_id and si.deleted=0
where ((no like 'key') or contract_id in (select id from contract_info where deleted=0 and company_name regexp 'key'))
order by si.main_id desc

文件上传优化

  1. 文件上传的方法,上传后,返回的应该是 以 / 开头的,对应 root-path 的相对路径,方便用户自己补全文件的访问域名做反向代理。
    目前返回了绝对路径,在 windows 环境下返回的路径类似于 D://xxx.pmg,这样用户是无法使用的。

  2. 文件上传中的 Ftp 上传的方法可以考虑使用 hutool 中提供的工具,不用重复造轮子

  3. 现有的 FtpFileClientLocalFileClient 的部分方法是一样的,可以抽象一个 AbstractFileClient,它们两个继承这个抽象类

admin-websocket 拆分

目前 admin-websocket 包含了 log,notify,sys 模块。导致引入 websocket 后无法指定模块排除

模块扁平化处理

image
模块层级导致看似公正有序,其实比较繁重,扁平化处理去除繁重,将模块全部改成一级,自动默认starter

操作日志starter 切面内引用数组List 导致添加方法报错

private final List<Class<?>> ignoredParamClasses = Arrays.asList(ServletRequest.class, ServletResponse.class,
		MultipartFile.class);

/**
 * 添加忽略记录的参数类型
 * @param clazz 参数类型
 */
public void addIgnoredParamClass(Class<?> clazz) {
	ignoredParamClasses.add(clazz);
}

PageParam 分页参数解析优化

目前 PageParamArgumentResolver 按照 PageParamRequest 的属性进行 PageParam 的入参转换,这样的话,分页参数的属性名,排序的规则方式就已经定死了,不方便其他使用者扩展。

需要参考 spring 的 PageableArgumentResolverPageableHandlerMethodArgumentResolverSupport,提供自定义分页参数的功能。
以及提供类似 SortArgumentResolver 的解析器,方便指定如何解析排序参数。

注意,这里分页参数的修改需要同步 openApi 的文档映射, PageParam 修改为用户自己的请求类,所以 ballcat-extend-openapi 中的配置里的静态方法需要优化,方便替换

public class OpenApiConfiguration {  
    static {
  	  // 由于 PageParam 是由自定义的 PageParamArgumentResolver 处理的,所以需要在文档上进行入参的格式转换
  	  SpringDocUtils config = SpringDocUtils.getConfig();
  	  config.replaceParameterObjectWithClass(PageParam.class, PageParamRequest.class);
    }

字典优化

字典需要再梳理下,理论上不应该允许删除,加个状态控制启用禁用会好点

只读可写的控制不是很合理,字典应该始终可以修改 text,而 value 和 dict_code 是不允许修改的

实现密码规则可配置

目前前端使用正则校验,服务端实际无控制。

若服务端也添加校验,则需修改为配置方式,方便用户自定义密码规则

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.