Git Product home page Git Product logo

lin-cms-spring-boot's Introduction


Lin-CMS-Spring-boot

一个简单易用的CMS后端项目 | Lin-CMS-Spring-boot

spring boot mybatis-plus LISENCE

Lin-CMS 是林间有风团队经过大量项目实践所提炼出的一套内容管理系统框架
Lin-CMS 可以有效的帮助开发者提高 CMS 的开发效率。

预览 |  简介 |  联系和交流

预览

线上 demo

http://face.cms.talelin.com/

文档地址

http://doc.cms.talelin.com/

简介

什么是Lin CMS

Lin-CMS 是林间有风团队经过大量项目实践所提炼出的一套内容管理系统框 架。Lin-CMS 可以有效的帮助开发者提高 CMS 的开发效率。

本项目是 Lin CMS 后端的 java spring-boot 实现,需要前端?请访 问前端仓库

Lin CMS 特点

Lin CMS 的构筑**是有其自身特点的。下面我们阐述一些 Lin 的主要特点。

Lin CMS 是一个前后端分离的 CMS 解决方案

Lin 既提供后台的支撑,也有一套对应的前端系统,你也可以选择不同的后端实现, 如 koa 和 flask。

框架本身已内置了 CMS 常用的功能

Lin 已经内置了 CMS 中最为常见的需求:用户管理、权限管理、日志系统等。开发者只需 要集中精力开发自己的 CMS 业务即可

Lin CMS 本身也是一套开发规范

Lin CMS 除了内置常见的功能外,还提供了一套开发规范与工具类。 Lin CMS 只需要开发者关注自己的业务开发,它已经内置了很多机制帮助开发者快速开发自己的业务。

扩展灵活

Lin CMS 支持 extension 来便捷地增强你的业务。

前端支持

Lin CMS 也有自己的前端实现,强强联合为你助力。

完善的文档

Lin CMS 提供大量的文档来帮助开发者使用

联系和交流

注意事项

  • Lin CMS 需要一定的基础,至少你得有一定的 java 基础和数据库基础,并且比较熟悉spring-boot和mybatis, 当然如果你是个 java 程序员,这些肯定都不在话下。

  • Lin CMS 基于 spring boot ,因此也采取了 spring boot 的 starter (启动器)机制,我们也有自己的 starter,见 lin-cms-java-core

贡献代码

我们的代码基于 develop 分支开发,欢迎提交 Pull Request 进行代码贡献。

在提交 Pull Request 之前,请详细阅读我们的开发规范,否则可能因为 Commit 信息不规范等原因被关闭 Pull Request。

开源协议

MIT © 2021 林间有风

lin-cms-spring-boot's People

Contributors

china-wangyu avatar colorful3 avatar dengliming avatar dependabot[bot] avatar gadfly3173 avatar jokky6 avatar juzi214032 avatar towelong 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

lin-cms-spring-boot's Issues

项目内 User 相关类命名冲突问题

我们内置的管理员用户表为 lin_user,对应的模型层命名为 UserDO、服务层命名为UserService、控制器层命名为UserController
当我们开发一个独立的 CMS 项目,是没有什么命名冲突问题的。
但对于一个小型项目,我们想使用 LinCMS 快速开发 C 端用户接口,如果 C 端用户表名称为 user ,那么对应的模型层、服务层等等就不能使用UserDOUserService这些来命名,可否考虑把lin内置的类命名加一个前缀做区分?(例如LinUserDOLinUserService)。这样C端用户相关的类,就不用考虑命名冲突问题了。也不会因为系统中user相关的命名太多,对后续的维护者造成困惑。

LocalUser 对象内存储的类型冲突问题

此问题属于 #185 的衍生问题。

LocalUser对象是线程安全的当前登录用户,除了 LinCMS 系统内的管理员用户(对应模型为UserDO)外,C端用户也需要同样设置到请求上下文中,甚至说除了用户需要设置到请求上下文中,其他数据也可能需要设置到请求上下文中。现在的 LocalUser 只能 set 和 get UserDO 类型的对象:

private static ThreadLocal<UserDO> local = new ThreadLocal<>();

这样 LocalUser 基本就不可复用了,如果 C 端用户同样需要设置线程安全的当前登录用户,就不得不重新封装一个类,但里面的代码除了所存储的类型基本都一样的,可以考虑把ThreadLocal 中的泛型UserDO类型改为Map<String, Object>,并将类重命名为 LinThreadLocal

    private static ThreadLocal<Map<String, Object>> threadLocal = new ThreadLocal<>();

这样无论开发者想要在ThreadLocalsetget什么类型的对象,就都可以通过该类来操作了。

认证 (authentication) 和授权 (authorization)两个含义弄反了

描述 bug

两个异常和两个Code码含义写反了
AuthorizationException和AuthenticationException
UN_AUTHORIZATION(10000, "Authorization Failed", "认证失败"),
UN_AUTHENTICATION(10010, "Authentication Failed", "授权失败"),
认证实现类
AuthorizeVerifyResolverImpl和AuthorizeVerifyResolver应该是AuthenticateVerifyResolverImpl和AuthenticateVerifyResolver

配置文件切换问题

请详细描述您对本项目的任何问题,我们会在第一时间查阅和解决。
请问一下为什么在命令行中指定项目配置环境和jar包同目录下配置环境都无法使用呢?而且在resource目录下的application.yml文件中,如果代码写死激活的是dev环境后,打包运行怎么都的dev环境

Token

CMS 是一个颇为复杂的应用,它需要的东西太多。我们无法涉及到方方面面,因此关于新特性,我们会以讨论的形式来确定这个特性是否去实现,以什么形式实现。
我们鼓励所有对这个特性感兴趣的人来参与讨论,当然如果你想参与特性的开发那就更好了。

如果你实现了一个 feature,并通过了单元测试,请用git rebase合并成一条标准的feat: description提交,然后向我们的
项目提 PR,我们会在第一时间审核,并感谢您的参与。

请问这个特性跟什么问题相关? 有哪些应用场景?请详细描述。
请清晰准确的描述问题的内容,以及真实的场景。

请描述一下你想怎么实现这个特性
怎么样去实现这个特性?加入核心库?加入工程项目?还是其他方式。
当然你也可以描述它的具体实现.

讨论
如果这个特性应用场景非常多,或者非常重要,我们会第一时间去处理。但更多的我们希望更多的人参与讨论,来斟酌它的可行性。

字段权限控制的功能还会添加吗?期待!!我现在做的系统,在用户分享的时候,可能会对表单中信息进行部分隐藏

CMS 是一个颇为复杂的应用,它需要的东西太多。我们无法涉及到方方面面,因此关于新特性,我们会以讨论的形式来确定这个特性是否去实现,以什么形式实现。
我们鼓励所有对这个特性感兴趣的人来参与讨论,当然如果你想参与特性的开发那就更好了。

如果你实现了一个 feature,并通过了单元测试,请用git rebase合并成一条标准的feat: description提交,然后向我们的
项目提 PR,我们会在第一时间审核,并感谢您的参与。

请问这个特性跟什么问题相关? 有哪些应用场景?请详细描述。
请清晰准确的描述问题的内容,以及真实的场景。

请描述一下你想怎么实现这个特性
怎么样去实现这个特性?加入核心库?加入工程项目?还是其他方式。
当然你也可以描述它的具体实现.

讨论
如果这个特性应用场景非常多,或者非常重要,我们会第一时间去处理。但更多的我们希望更多的人参与讨论,来斟酌它的可行性。

replace-deprecated-api-usage分支分页插件无效,附修改建议

描述 bug

branch::refactor/replace-deprecated-api-usage分页插件无效

你使用哪个版本出现该问题?

branch::refactor/replace-deprecated-api-usage commit::471d212ff33cc30dca82c418adc549544d1a542e

修复建议

由于我自己fork的项目做了大量改动,不方便pr,因此将建议修改的内容写在下面

lin-cms-spring-boot/src/main/java/io/github/talelin/latticy/common/configuration/CommonConfiguration.java中line27-30改为

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }

swagger

描述 bug
添加依赖如下

io.springfox
springfox-swagger2
2.9.2


io.springfox
springfox-swagger-ui
2.9.2


com.github.xiaoymin
swagger-bootstrap-ui
1.9.6

当访问http://127.0.0.1:5000/doc.html
返回
{
"code": 10020,
"message": "找不到相应的视图处理器",
"request": "GET /doc.html"
}
版本 0.2.0-R2

如果使用master,请表明是 master 分支,否则给出具体的版本号

如何再现
访问http://127.0.0.1:5000/doc.html

文件上传的Bug

Bug描述

项目里在预处理器preHandler.handle里做了存库的操作,preHandler.handle的执行先于handleOneFile,而handleOneFile可能处理失败了返回false,但数据库插入成功了,返回给前端数据却是正确的结果(在preHandle里已经提前把数据add了),但是文件并没有真正上传成功,url也是无法访问的。

截屏2020-11-02 09 20 08

如何复现

把secret-key随便改成一个错误的值即可复现。

使用Springboot+Vue进行excel下载的时候,excel会出现文件破损

使用Springboot+Vue进行excel下载的时候,excel会出现文件破损。一模一样的代码,原生Springboot项目里没问题,迁到lin-cms下面,下载的excel就打不开

我弄了个小demo进行测试。依赖使用4.1.0版本的poi-ooxml。
java代码:
@GetMapping(value = "/test")
public ResponseVO exportExcel(HttpServletResponse response){

    // 创建工作簿
    XSSFWorkbook workbook = new XSSFWorkbook();
    // 创建表
    Sheet sheet = workbook.createSheet("page");
    // 创建行
    Row titleRow = sheet.createRow(0);
    // 表头
    String[] head = {"时间", "缺陷编号", "缺陷等级"};
    // 设置表头
    for (int i = 0; i < head.length; i++) {
        titleRow.createCell(i).setCellValue(head[i]);
        sheet.setColumnWidth(i, 4000);
    }
    // 设置表格内容
    for (int i = 0; i < 5; i++){
        Row row = sheet.createRow( i + 1);
        String[] bugTitle = new String[3];
        bugTitle[0] = "aaaa";
        bugTitle[1] = String.valueOf(i);
        bugTitle[2] = "bbbb";
        for (int j = 0; j < bugTitle.length; j++){
            row.createCell(j).setCellValue(bugTitle[j]);
        }
    }

    // 设置文件名
    String fileName ="bugInfo.xlsx";

    OutputStream outputStream =null;
    try {
        fileName = URLEncoder.encode(fileName,"UTF-8");
        //设置ContentType请求信息格式
        response.setContentType("application/vnd.ms-excel");
        response.setHeader("Content-disposition", "attachment;filename=" + fileName);
        outputStream = response.getOutputStream();
        workbook.write(outputStream);
        outputStream.flush();
        outputStream.close();
    } catch (IOException e) {
        e.printStackTrace();
    }

    return null;
}

vue代码:
exportExcel() {
this.$axios({
method: 'get',
url: '/excel/test',
responseType: 'blob',
}).then(
res => {
const { data } = res
const url = window.URL.createObjectURL(new Blob([data]))
const link = document.createElement('a')
link.style.display = 'none'
link.href = url
link.setAttribute('download', 'excel.xlsx')
document.body.appendChild(link)
link.click()
document.body.removeChild(link)
window.URL.revokeObjectURL(url)
}
)
},

关于配置文件格式

能否采用utf8作为配置文件的默认格式,虽然不影响使用,但是所有的中文注释全是是乱码看着很难受,要么直接取消注释。

新建超级管理员账户是否有可能?

我想用其它名字建一个超级管理员(root)的登录账户(比如用admin),在lin_user_identity表中,把admin的user_id设成了1(默认是2),注入对应密码,然后通过postman用admin登录,结果返回服务器内部错误。怎样才能设置成功?

当请求体中的 json 参数类型错误,异常拦截报错不准确

描述 bug

  • 你是如何操作的?
    后端接口的 DTO 对象中定义一个列表类型参数;前端故意将参数类型传错,把请求 body 里面的列表类型参数改为整型或字符串类型。

  • 发生了什么?

后端返回的报错为:

{
    "code": 10030,
    "message": "请求体不可为空",
    "request": "PUT /cms/admin/user/2"
}

(截图为”管理员更新用户信息”的接口请求)
image

  • 你觉得应该出现什么?
    应该出现如下报错:
{
    "code": 10030,
    "message": "group_ids字段类型错误",
    "request": "PUT /cms/admin/user/2"
}

请求体不可为空的报错信息非常模糊,对前端误导性极强。

你使用哪个版本出现该问题?

如果使用master,请表明是 master 分支,否则给出具体的版本号
master 分支,0.2.0-RC2 版本。

If your bug is deterministic, can you give a minimal reproducing code?
Some bugs are not deterministic. Can you describe with precision in which context it happened?
If this is possible, can you share your code?
修改如下代码:

@ExceptionHandler({HttpMessageNotReadableException.class})
public UnifyResponseVO processException(HttpMessageNotReadableException exception, HttpServletRequest request, HttpServletResponse response) {
log.error("", exception);
UnifyResponseVO result = new UnifyResponseVO();
result.setRequest(getSimpleRequest(request));
String errorMessage = CodeMessageConfiguration.getMessage(10170);
if (StrUtil.isBlank(errorMessage)) {
result.setMessage(exception.getMessage());
} else {
result.setMessage(errorMessage);
}
result.setCode(Code.PARAMETER_ERROR.getCode());
response.setStatus(HttpStatus.BAD_REQUEST.value());
return result;
}

自定义getById()查询方法中混入了book表中的字段,很迷惑,求教

按照https://doc.cms.talelin.com/start/spring-boot/backend-demo.html的介绍,我自定义了一个表goods,然后按照教程创建了对应的数据层,模型层,业务层(包括映射xml文件等已建好)和控制层。

然后用postman工具运行get请求,localhost:5000/v1/goods/1,返回错误:"code": 9999,
"message": "服务器未知错误"
查看后台日志发现:对mysql查询数据时,竟然在mysql运行语句中出现了框架自带的book表的字段,进行多轮排查,找不到根本原因,请求帮助!

11

七牛云文件上传问题

请详细描述您对本项目的任何问题,我们会在第一时间查阅和解决。
在使用七牛云文件上传的方式时,貌似会生成一个 token 用来文件上传,但是这个 token 是有时间限制的,如果过期了在进行上传会出现上传不到七牛云的而数据库中却有文件记录的情况,希望可以更新一个能够自动在 token 过期后重新获取的机制。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

delete_time联合唯一索引不生效

描述 bug

项目中使用delete_time作为逻辑删除字段,默认为null值,经测试null值建立的唯一索引是不生效的,如下面的建表语句,仍然可以插入相同username的数据

CREATE TABLE lin_user
(
    id          int(10) unsigned NOT NULL AUTO_INCREMENT,
    username    varchar(24)      NOT NULL COMMENT '用户名,唯一',
    nickname    varchar(24)               DEFAULT NULL COMMENT '用户昵称',
    avatar      varchar(500)              DEFAULT NULL COMMENT '头像url',
    email       varchar(100)              DEFAULT NULL COMMENT '邮箱',
    create_time datetime(3)      NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
    update_time datetime(3)      NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
    delete_time datetime(3)               DEFAULT NULL,
    PRIMARY KEY (id),
    UNIQUE KEY username_del (username, delete_time),
    UNIQUE KEY email_del (email, delete_time)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4;

七牛云上传图片失败、七牛云的uptoken过期

描述 bug

七牛云上传图片失败、七牛云的uptoken过期

你使用哪个版本出现该问题?

版本: 0.2.0-RC2

如何再现

当项目运行超过一小时以后、七牛云文件上传不了。
我看了一下七牛云当文档、应该是默认的七牛云的token只有1小时、一个小时以后token会过期。
希望可以优化一下代码、当七牛云token过期的生活、重新更新uptoken

这个是我目前的解决办法
QiniuUploader.java
`
/**
/**
* 处理一个文件数据
*
* @param bytes 文件数据,比特流
* @param newFilename 新文件名称
* @return 处理是否成功,如果出现异常则返回 false,避免把失败的写入数据库
*/
@OverRide
protected boolean handleOneFile(byte[] bytes, String newFilename) {

    ByteArrayInputStream byteInputStream = new ByteArrayInputStream(bytes);
    try {
        Response response = uploadManager.put(byteInputStream, newFilename, upToken, null, null);
        log.info(response.toString());
        return response.isOK();
    } catch (QiniuException ex) {
        Response r = ex.response;
        log.error("qiniuyun upload file error: {}", r.error);
        return this.refreshHandleOneFile(bytes,newFilename);
    }
}

/**
 * 更新uptoken
 *
 * @param bytes       文件数据,比特流
 * @param newFilename 新文件名称
 * @return 处理是否成功,如果出现异常则返回 false,避免把失败的写入数据库
 */
private boolean refreshHandleOneFile(byte[] bytes, String newFilename){

    Auth auth = Auth.create(accessKey, secretKey);
    upToken = auth.uploadToken(bucket);

    ByteArrayInputStream byteInputStream = new ByteArrayInputStream(bytes);
    try {
        Response response = uploadManager.put(byteInputStream, newFilename, upToken, null, null);
        log.info(response.toString());
        return response.isOK();
    } catch (QiniuException ex) {
        Response r = ex.response;
        log.error("qiniuyun upload file error: {}", r.error);
        return this.refreshHandleOneFile(bytes,newFilename);
    }
}

`

可以出JPA的版本CMS么

IMOC课程中七月老师一直对JPA安利,使用后也比较喜欢JPA。所以能不能出个JPA版本的CMS

application.yml 数据库密码建议使用引号

请详细描述您对本项目的任何问题,我们会在第一时间查阅和解决。
在application.yml中如果数据密码是以特殊字符比如","开头的,如果没有引号,会报错

工作流引擎会做吗?

CMS 是一个颇为复杂的应用,它需要的东西太多。我们无法涉及到方方面面,因此关于新特性,我们会以讨论的形式来确定这个特性是否去实现,以什么形式实现。
我们鼓励所有对这个特性感兴趣的人来参与讨论,当然如果你想参与特性的开发那就更好了。

如果你实现了一个 feature,并通过了单元测试,请用git rebase合并成一条标准的feat: description提交,然后向我们的
项目提 PR,我们会在第一时间审核,并感谢您的参与。

请问这个特性跟什么问题相关? 有哪些应用场景?请详细描述。
请清晰准确的描述问题的内容,以及真实的场景。

请描述一下你想怎么实现这个特性
怎么样去实现这个特性?加入核心库?加入工程项目?还是其他方式。
当然你也可以描述它的具体实现.

讨论
现在做的后台系统基本都需要用到工作流引擎,目前使用的是一套.NET敏捷开发框架,技术有点老旧了,如果能加上工作流引擎,就可以切换到使用lin-cms了

AuthorizeVerifyResolverImpl 的 getClaim 方法存在 bug

描述 bug

  • 你是如何操作的?
    按文档配置后登录
  • 发生了什么?
    服务器内部错误
  • 你觉得应该出现什么?
    登录成功

你使用哪个版本出现该问题?
最新版本master分支

如果使用master,请表明是 master 分支,否则给出具体的版本号

如何再现

If your bug is deterministic, can you give a minimal reproducing code?
Some bugs are not deterministic. Can you describe with precision in which context it happened?
If this is possible, can you share your code?

如果你确定存在这个 bug,你能提供我们一个最小的实现代码吗?
一些 bug 是不确定,只会在某些条件下触发,你能详细描述一下具体的情况和提供复现的步骤吗?
当然如果你提供在线的 repo,那就再好不过了。

bug出现的代码: if (user.getAvatar().startsWith("http")) {...} 出现空指针异常
getAvatar 未判空,if (user.getAvatar() != null && user.getAvatar().startsWith("http")) {...} 修改过后登录成功。

如果你发现了 bug,并修复了它,请用git rebase合并成一条标准的fix: description提交,然后向我们的
项目提 PR,我们会在第一时间审核,并感谢您的参与。

项目运行错误

使用gradle配置成功,数据库已配置,在运行项目后出现如下错误
image

当我导入项目后maven import的时候会提示 Cannot resolve com.amdelamar:jhash:2.1.2

描述 bug

经查看,这个无法导入的jar是在lin-cms-core-0.11-RC3.pom中定义的,但是我使用阿里云或者maven官方的源都找不到该jar

org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: com/amdelamar/jhash/exception/InvalidHashException
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1055)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)

出现该问题的最顶端在UserIdentityServiceImpl类中49行的verify方法中

  • 你是如何操作的?
    下载sleeve0.2.0版本后import库然后run

  • 发生了什么?

  • 你觉得应该出现什么?

你使用哪个版本出现该问题?
sleeve0.2.0
如果使用master,请表明是 master 分支,否则给出具体的版本号

如何再现

If your bug is deterministic, can you give a minimal reproducing code?
Some bugs are not deterministic. Can you describe with precision in which context it happened?
If this is possible, can you share your code?

如果你确定存在这个 bug,你能提供我们一个最小的实现代码吗?
一些 bug 是不确定,只会在某些条件下触发,你能详细描述一下具体的情况和提供复现的步骤吗?
当然如果你提供在线的 repo,那就再好不过了。

如果你发现了 bug,并修复了它,请用git rebase合并成一条标准的fix: description提交,然后向我们的
项目提 PR,我们会在第一时间审核,并感谢您的参与。

spring boot 2.5.0中修改了数据库相关配置,需要对应修改项目配置

现在spring在项目启动时会自动执行schema.sql来进行数据库初始化,需要在dev和prod环境配置文件中加上相关配置:

spring:
  # 数据源配置,请修改为你项目的实际配置
  datasource:
    # 常规数据源配置
  sql:
    init:
      enabled: false

test配置则需要修改为:

spring:
  # h2 内存数据库配置,供测试使用,其它环境勿用
  datasource:
    username: "sa"
    password: ''
    driver-class-name: org.h2.Driver
    url: jdbc:h2:mem:testdbsa;MODE=MYSQL;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false
  sql:
    init:
      platform: h2
      continue-on-error: false
      schema-locations: classpath:/h2-test.sql
  h2:
    console:
      enabled: true
      path: /h2

DTO验证只有一个字段的时候有bug

拉取的Lin CMS最新代码。
代码如下
@PostMapping("/qq/login") public String appLogin(@Validated @RequestBody QQLoginDTO loginDTO) { return "aaa"; }

`
@DaTa
@NoArgsConstructor
public class QQLoginDTO {

@NotBlank(message = "{code.not-blank}")
private String code;

}
`

如果code参数没传,返回给前端没有任何提示信息
{ "code": 10030, "message": "", "request": "POST /user/qq/login" }

报错信息
org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot construct instance of io.github.talelin.latticy.dto.user.AppLoginDTO (although at least one Creator exists): cannot deserialize from Object value (no delegate- or property-based Creator); nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of io.github.talelin.latticy.dto.user.AppLoginDTO (although at least one Creator exists): cannot deserialize from Object value (no delegate- or property-based Creator)

好像是因为只有一个参数检验的时候不能正常序列化
有什么优雅的办法解决这个问题吗

配置了七牛 文件上传没进七牛里 数据库type显示local

描述 bug
配置了七牛 文件上传没进七牛里 数据库type显示local

  • 你是如何操作的?
    按照文档配置了七牛 然后直接用postman测试 只改了config.yml文件
  • 发生了什么?
    image
  • 你觉得应该出现什么?
    但是七牛查不到 document not found 是不是我少了什么步骤 或者是不止要改配置
    你使用哪个版本出现该问题?
    0.2.0-RC1
    如果使用master,请表明是 master 分支,否则给出具体的版本号

如何再现

If your bug is deterministic, can you give a minimal reproducing code?
Some bugs are not deterministic. Can you describe with precision in which context it happened?
If this is possible, can you share your code?

如果你确定存在这个 bug,你能提供我们一个最小的实现代码吗?
一些 bug 是不确定,只会在某些条件下触发,你能详细描述一下具体的情况和提供复现的步骤吗?
当然如果你提供在线的 repo,那就再好不过了。

如果你发现了 bug,并修复了它,请用git rebase合并成一条标准的fix: description提交,然后向我们的
项目提 PR,我们会在第一时间审核,并感谢您的参与。

用户删除漏洞

删除用户的 service 层接口,理应不允许删除 root 分组的用户。建议删除前加一个拦截。

因为我们系统默认 root 用户的 id 为 1, 如果前端调用将id参数设置为 1 ,将会删除掉 root 用户,从而导致系统无法正常使用。

@Transactional
@Override
public boolean deleteUser(Integer id) {
throwUserNotExistById(id);
boolean userRemoved = userService.removeById(id);
QueryWrapper<UserIdentityDO> wrapper = new QueryWrapper<>();
wrapper.lambda().eq(UserIdentityDO::getUserId, id);
return userRemoved && userIdentityService.remove(wrapper);
}

关于权限注解,能否提供排序机制

CMS 是一个颇为复杂的应用,它需要的东西太多。我们无法涉及到方方面面,因此关于新特性,我们会以讨论的形式来确定这个特性是否去实现,以什么形式实现。
我们鼓励所有对这个特性感兴趣的人来参与讨论,当然如果你想参与特性的开发那就更好了。

如果你实现了一个 feature,并通过了单元测试,请用git rebase合并成一条标准的feat: description提交,然后向我们的
项目提 PR,我们会在第一时间审核,并感谢您的参与。

请问这个特性跟什么问题相关? 有哪些应用场景?请详细描述。

比如在权限注解上
@PermissionMeta(value="查询Banner列表")
@PermissionMeta(value="添加Banner")
@PermissionMeta(value="修改Banner")
@PermissionMeta(value="删除Banner")
@PermissionMeta(value="查询单个Banner")

我想让查询单个Banner这个权限放在查询Banner列表后面,能否提供排序机制

请描述一下你想怎么实现这个特性

能够在@PermissionMeta上加上order属性 自己设定排序

讨论
如果这个特性应用场景非常多,或者非常重要,我们会第一时间去处理。但更多的我们希望更多的人参与讨论,来斟酌它的可行性。

JWT 生成 generateToken只能传入 long 类型的 identity 如果过想传入 String类型 需要重写 JWT,建议提供一下 String 的方法

CMS 是一个颇为复杂的应用,它需要的东西太多。我们无法涉及到方方面面,因此关于新特性,我们会以讨论的形式来确定这个特性是否去实现,以什么形式实现。
我们鼓励所有对这个特性感兴趣的人来参与讨论,当然如果你想参与特性的开发那就更好了。

如果你实现了一个 feature,并通过了单元测试,请用git rebase合并成一条标准的feat: description提交,然后向我们的
项目提 PR,我们会在第一时间审核,并感谢您的参与。

请问这个特性跟什么问题相关? 有哪些应用场景?请详细描述。
请清晰准确的描述问题的内容,以及真实的场景。

请描述一下你想怎么实现这个特性
怎么样去实现这个特性?加入核心库?加入工程项目?还是其他方式。
当然你也可以描述它的具体实现.

讨论
如果这个特性应用场景非常多,或者非常重要,我们会第一时间去处理。但更多的我们希望更多的人参与讨论,来斟酌它的可行性。

文件上传功能,限制文件大小编码不规范

请详细描述您对本项目的任何问题,我们会在第一时间查阅和解决。
spring 中有配置限制文件大小上传的设置,设置如下
// 设置单个文件大小
spring.servlet.multipart.max-file-size= 10MB
// 设置单次请求文件的总大小
spring.servlet.multipart.max-request-size= 50MB

而lin-cms-boot 中,理解不到位,只使用了max-file-size参数,并错用为总文件大小限制,同时又另外设置single-limit参数去判断单个文件。
建议,统一规范,在io/github/talelin/latticy/extensions/file/config.properties中使用配置max-request-size和max-file-size参数即可,去除single-limit部分涉及到的多余的业务代码

根据文档的操作启动有问题

拉取git代码
然后更改数据库账号密码
mvn install -Dmaven.test.skip=true之后运行
java -jar target/latticy-0.2.0-RELEASE.jar
就会出现编码为GBK的报错。
1

加上 -Dfile.encoding=utf-8 之后会有新的编码问题
插入数据库是问号乱码
2

3

其他Java项目都是正常的。
我在idea里面也设置了编码为UTF8。
文件编码也都是UTF8
数据库是UTF8MB4编码
求救大佬。

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.