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.68 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 Issues

操作日志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);
}

PasswordEncoder 优化

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

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

PageParam 优化

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

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

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

2. 支持多列排序

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

文件上传优化

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

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

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

ODIC 支持

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

模块扁平化处理

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

多数据源会支持吗?

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

SQL脚本缺失

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

admin-websocket 拆分

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

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

多语言插件

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

common-security

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

是否支持pg数据库

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

实现密码规则可配置

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

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

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);
    }

[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的工具类代价最小,如果可以我愿意帮你解决这个问题

字典优化

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

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

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 }
麻烦看看是否有问题?

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

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

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

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.