2025-04-18 09:52
@杜福忠 已经做测试。结果如下:1、根据官方说明,可以在configConstant 里再增加ParserConfig.getGlobalInstance().setSafeMode(true)代码,可以全局开启fastjson的autotype的黑名单功能,只要@type指定的类名在fastjson的jar包里的黑名单里,就可以控制住。但需要依赖fastjson库里黑名单的不断完善,有可能过不了等保扫描。2、把依赖库fastjson-1.2.83.jar换成fastjson-1.2.83_noneautotype.jar,这样就完全屏蔽了autotype功能,彻底解决fastjson的这个安全问题。3、升级到fastjson2,我测试的是这个坐标:
com.alibaba
fastjson
2.0.57
这是兼容fastjson1但实际使用的是fastjson2的库,测试也可以通过,但一样是需要在在configConstant 里再增加ParserConfig.getGlobalInstance().setSafeMode(true)代码。
最后感谢杜总的大力支持!
2025-04-17 14:52
@杜福忠 确实是启用了me.setResolveJsonRequest(true),那我是不是只要在configConstant 里再增加ParserConfig.getGlobalInstance().setSafeMode(true);就可以全局禁用autoType了?
2025-04-17 14:48
quartz可以通过配置,适配多节点调度。
#
#============================================================================
# Configure Main Scheduler Properties 调度器属性
#============================================================================
org.quartz.scheduler.instanceName: DefaultQuartzScheduler
org.quartz.scheduler.instanceId = AUTO
org.quartz.scheduler.rmi.export: false
org.quartz.scheduler.rmi.proxy: false
org.quartz.scheduler.wrapJobExecutionInUserTransaction: false
org.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount= 10
org.quartz.threadPool.threadPriority: 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread: true
#============================================================================
# Configure JobStore
#============================================================================
#存储方式使用JobStoreTX,也就是数据库
org.quartz.jobStore.class: org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass:org.quartz.impl.jdbcjobstore.StdJDBCDelegate
#使用自己的配置文件
org.quartz.jobStore.useProperties:true
#数据库中quartz表的表名前缀
org.quartz.jobStore.tablePrefix:QRTZ_
org.quartz.jobStore.dataSource:QuartzDS
#是否使用集群(如果项目只部署到 一台服务器,就不用了)
org.quartz.jobStore.isClustered = false
org.quartz.jobStore.misfireThreshold: 60000
org.quartz.jobStore.clusterCheckinInterval: 10000
#============================================================================
# Configure Datasources
#============================================================================
#配置数据库源
org.quartz.dataSource.QuartzDS.connectionProvider.class: cn.york.common.quartz.util.DruidConnectionProvider
org.quartz.dataSource.QuartzDS.driver: com.mysql.cj.jdbc.Driver
org.quartz.dataSource.QuartzDS.url: jdbc:mysql://192.168.0.46:3306/pt?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true
org.quartz.dataSource.QuartzDS.user: root
org.quartz.dataSource.QuartzDS.password: ***********
org.quartz.dataSource.QuartzDS.validationQuery: select 0 from dual
org.quartz.dataSource.QuartzDS.maxConnection: 10
然后你就需要实现cn.york.common.quartz.util.DruidConnectionProvider这个数据源就行了
2024-12-07 13:13
@杜福忠 可能是我没描述清楚,DDL无所谓。主要是执行DDL,会让DDL执行之前对数据库的update强制提交,后面如果业务出现错误,要回滚,只能回滚DDL之后的update操作。DDL语句前面对数据库的update操作就不回滚了。
2024-12-05 11:33
@HingLo 如果你真需要保留历史上传文件记录,还是考虑引入OSS吧,minio是个不错的选择。既可以保留历史记录,还能存海量文件。并且可以解决后端集群部署的时候,读文件的问题。
2024-11-29 15:56
@JFinal 提到sql注入,有没有好的解决方案?或则jfinal提供一个预防sql注入的功能?最近被sql注入搞的头大。
2024-11-17 14:32
@杜福忠 市面上唯一能上生产的就是seata,但它好像只支持dubbo的rpc框架。我的rpc是基于thrift自己实现的。
2024-11-13 09:53
@杜福忠 杜总有空能不能研究一下,如果是在不同的jvm进程里呢?有没有解决方案,我是在这个地方卡住了。其实再说清楚一点,我是在这一台机器的jvm进程里通过rpc(tcp协议)调另一台机器的jvm进程下的一个方法。所以,我想必须要有一个事务协调器角色,所有事务都和事务协调器通信,告诉协调器自己是否ok,如果所有都ok,由协调器去控制所有xa事务提交,否则,就控制所有事务回滚。我理解是事务发起者先生成一个id,告诉事务协调器,然后把这个id和自己的xid发给事务协调器,调用rpc的时候,把这个id传递过去,rpc方法拿到这个id和自己的xid也去事务协调器注册自己的事务,协调器就可以把所有同一id的xid组成一个事务,然后每个进程里的xa事务都告诉协调器,自己是ok还是不ok,由协调器统一提交和回滚。到这里我弄不下去了。搁置了有快一年的时间了。