1
undef404 2022-05-25 09:56:02 +08:00
没用过 fastjson ,但是经常看到爆出漏洞的新闻。
|
2
dcsuibian 2022-05-25 09:57:33 +08:00 1
Spring Boot 默认 logback 和 Jackson ,真是 nice 。
|
3
rekulas 2022-05-25 09:57:37 +08:00 1
阿里巴巴:fastjson 现在负面有点多,这样吧咱们出个 fastjson2 重来 😜
|
4
rekulas 2022-05-25 09:58:21 +08:00 1
|
6
putaozhenhaochi 2022-05-25 10:36:55 +08:00 via Android
序列化库都这样
|
7
fanxasy OP 我之前也想把项目从 fastjson 迁移到 spring 自带的 jackson 去,然而当我点开一个转换工具类,5 位数行代码里一片 jsonobject 、jsonarray ,我放弃了...
|
8
Reficul 2022-05-25 10:46:42 +08:00
> 又不是不能用.jpg
|
9
tusj 2022-05-25 10:47:59 +08:00
bugest json
|
10
NoKey 2022-05-25 10:50:43 +08:00
问个问题,为啥不用 gson 呢?
|
11
fwee 2022-05-25 10:51:29 +08:00
我就问你快不快吧,毕竟不叫 safejson
|
12
sheeta 2022-05-25 10:53:03 +08:00 4
其实我一直想不明白,JSON 这么重要的场景,Java 都没有一个官方的序列化的库吗,反而各种库横行( Jackson, FastJson, Gson 等等)。其他语言如 PHP, Go, Python 都是官方支持 JSON 解析的吧
|
13
calano 2022-05-25 11:20:24 +08:00
所以现在 fastjson2 能用了吗,依赖太多实在换不动
|
14
6IbA2bj5ip3tK49j 2022-05-25 11:30:46 +08:00 10
开个地图炮,用着 spring 全家桶,还在用 fastjson 的,都是 sb 。
|
15
LeegoYih 2022-05-25 12:02:37 +08:00 3
个人几乎不用阿里开源框架 /工具
|
17
chenshun00 2022-05-25 12:25:36 +08:00
@xgfan 不好意思,傻逼就是在下
|
18
chendy 2022-05-25 12:27:50 +08:00 3
其实 jackson 之类的一样有漏洞,一样要升级( spring 全家桶的话跟着一起升级就行)
只是 fastjson 作为阿里开源,相关消息关注度更高 |
19
MakHoCheung 2022-05-25 12:31:33 +08:00
@sheeta 有官方(现在应该不算了)规范,JSON-P 和 JSON-B ,但是实现都在 Jakarta EE 容器里面。
|
21
cp19890714 2022-05-25 12:50:26 +08:00
我不能理解 “用 spring ,又特意改为 fastjson” 这种操作。
|
22
AA5DE3F034ACCB9E 2022-05-25 12:53:45 +08:00
@cp19890714 先入为主吧,像初学者搜索问下 Java 怎么处理 Json ,推荐的基本是 fastjson ,用习惯了 api 又怎么能轻易换
|
23
moen 2022-05-25 13:13:06 +08:00
阿里继续向外输出人才后估计又有更多公司要改成 Java ,按他们的习惯用上各种阿里的库(
|
24
nothingistrue 2022-05-25 13:41:38 +08:00
@sheeta #12 Java 有官方的序列化,因为安全漏洞实在难以修复,已经确定要被抛弃,只是因为替代品还没弄好一直没有正式抛弃。至于 JSON ,它属于类似 XML 那样的跨平台数据格式,原本不是为序列化 /反序列化服务的,即无法成为 Java 内部标准,也无法让 Java 为其提供 JDK 级别的实现,这点跟 XML 一样的待遇,很正常。
|
25
Oktfolio 2022-05-25 13:41:57 +08:00
@cp19890714 基本没人改 Spring MVC 的默认 JSON 序列化库吧......
|
26
est 2022-05-25 13:50:49 +08:00
我觉得 java 不支持 json 主要是因为强类型吧。
|
27
zoumouse 2022-05-25 13:53:03 +08:00
一般的序列化库都有问题,包括 Jackson ,可以看下这个 https://github.com/GrrrDog/Java-Deserialization-Cheat-Sheet
不过貌似 Gson 没出过大问题 |
28
nine 2022-05-25 13:53:04 +08:00
Java 这么繁荣是有道理的,连个 JSON 解析库都做不好,大把的输出时间换工资啊。
|
29
AlkTTT 2022-05-25 13:54:42 +08:00 3
@cp19890714 组内大部分同事对阿里开源有蜜汁崇拜,fastjson ,easyexcel ,nacos 都在用,劝都劝不动
|
30
Joker123456789 2022-05-25 13:55:31 +08:00
@nine 原来在你的逻辑里, 越麻烦 就越流行啊? 真是万年一遇的天才。
|
31
NoKey 2022-05-25 13:57:51 +08:00
@Goooooos 谢谢回复,我搜了一下,也没找到 gson 性能差多少的资料,能找到的性能比较看起来那点性能差异对服务影响不大,除非是那种大量解大 json 任务的
|
32
Joker123456789 2022-05-25 13:57:52 +08:00
@cp19890714 没多少人特意改为吧? 接收参数,响应参数等 框架自带的功能 又没人动。 只是需要手工处理 json 的时候 采用 fastjson ,因为用起来方便,不需要自己写工具类。jackson 确实麻烦了一点点。 只是一点点。
|
33
96XL 2022-05-25 14:29:35 +08:00
hutool 的 json 咋样
|
35
nine 2022-05-25 15:45:34 +08:00
@Joker123456789
存在即合理,我是发现者,不是定义者。 |
36
6IbA2bj5ip3tK49j 2022-05-25 16:12:36 +08:00 1
@Joker123456789 你这个就是 fastjson 使用者的典型例子。
很多 fastjson 的使用者不知道,jackson 的 objectMapper 早就注入到 spring context 里了。 直接用就好了,压根不存在“需要手工处理 json 的时候 采用 fastjson ,因为用起来方便,不需要自己写工具类”。 |
37
fiveStarLaoliang 2022-05-25 16:32:17 +08:00
看来学艺不精的不在少数,spring 全家桶稍微研究一下就知道 objectMapper 是现成的,直接拿来用就行了
|
40
DrJoseph 2022-05-25 17:27:06 +08:00 14
记者:你有什么特长
大爷:我心算很快 记者:1+1 等于多少 大爷:5 记者:不对 大爷:但我算的快 |
41
NewTab12138 2022-05-25 17:30:26 +08:00
建议离阿里的开源项目远一点
|
43
elintwenty 2022-05-25 17:30:38 +08:00
@Joker123456789 gson 并不比 fastjson 难用,上手极快
|
44
dqzcwxb 2022-05-25 17:30:45 +08:00 3
Fastjson 出 bug 就是国产垃圾
Jackson 出 bug 就是难免出问题能理解 |
45
dbpe 2022-05-25 17:32:12 +08:00
@MakHoCheung jakarta 这玩意...我记得 base in jdk11 吧?
|
46
hidemyself 2022-05-25 17:50:23 +08:00
v 站输出阿里也是政治正确吗。。
Dubbo,Druid,Nacos,Sentinel,arthas 等等好像都是阿里的 |
47
debuggeeker 2022-05-25 17:57:33 +08:00
当一个漏洞公开声明的时候,已经没有利用价值了
|
48
opengps 2022-05-25 18:04:42 +08:00
反过来想,其实那些“没有问题的库”,出问题风险更大
|
49
pcmgr456 2022-05-25 18:23:29 +08:00 via Android
@cp19890714 毕竟国内很多人觉得阿里开源的东西高级
|
50
jim9606 2022-05-25 19:10:29 +08:00
又是 AutoType 的问题。
罪过就是功能太强大,功能一复杂就容易出漏洞。 跟 Log4j 那个漏洞也是有一些相似,有多少人知道为啥一个日志库有动态 class 执行的功能呢。 |
51
ivechan 2022-05-25 19:13:32 +08:00
国外很多开源软件其实也有漏洞。。。大可平常心看待。
|
52
ufan0 2022-05-25 19:20:45 +08:00
早期确实坑爹,现在就平常心看待吧,出问题不可怕,怕的是解决不了以及解决效率。
就这点看来,fastjson 还是优秀的。 另外慎用 fastjson2 ,同事近期还给 fastjson2 提了兼容性 issue 已被确认。 |
53
Oktfolio 2022-05-25 19:25:15 +08:00
|
54
EarthChild 2022-05-25 19:34:09 +08:00
|
56
zhleonix 2022-05-25 19:49:31 +08:00
@AA5DE3F034ACCB9E 的确,Fastjson 的 API 比较简单,jackson 麻烦。
|
57
ychost 2022-05-25 19:56:36 +08:00
基本的序列化 /反序列化都有类似漏洞,关 authType 保平安,那玩意儿除了 RPC 之外,其它应用场景真的很少
|
58
sprite82 2022-05-25 21:27:40 +08:00
@xgfan #36 人家不是说了,要手写工具类,Jackson api 实在不好用,这也是 fastjson 流行的原因之一。而不是注入不注入的问题,哪怕不是注入的,写个单例也比定义个变量再用注解方便
|
60
6IbA2bj5ip3tK49j 2022-05-25 21:41:33 +08:00
@sprite82 最常用的 encode/decode ,两者基本没区别
``` objectMapper.writeValueAsString(car); JSON.toJSONString(car); objectMapper.readValue(json, Car.class); JSON.parseObject(jsonString, Car.class); ``` |
61
6IbA2bj5ip3tK49j 2022-05-25 21:44:01 +08:00
至于使用静态 JSON.xxxx 方法好,还是注入好,这个涉及到个人偏好问题了。
|
62
XhstormR02 2022-05-25 22:09:07 +08:00 via Android
@xgfan 静态就不用 new 了,像 jackson 还要得自己 new ,小白说这可太复杂了,狗头保命。我站 boot ,boot 用啥我用啥
|
63
HiShan 2022-05-25 22:09:56 +08:00 2
请问在座的各位能写一个又快又安全的 JSON 库出来吗?又要用又要说别人垃圾漏洞多。还能扯到 Java 垃圾连个自带的 json 库都没有。。不能做一个有礼貌的伸手党吗?
|
64
sprite82 2022-05-25 22:11:30 +08:00
@xgfan writeValueAsString 和 toJSONString ,我觉得后者更直白些,我感觉不爽的是 Jackson 会抛异常,我要专门处理它,所以我一般会写个工具类,用 fastjson 的 api 名字来包一下 Jackson 。静态和注入,我觉得综合考虑还是静态更好,注入的话没法直接在静态方法中使用
|
65
Bromine0x23 2022-05-25 22:41:01 +08:00
只能说对应大部分开发者来说易用性确实大于可扩展性。
性能上的话,当下 fastjson1 对比 jackson 已经没优势了: https://github.com/fabienrenaud/java-json-benchmark |
66
locochen 2022-05-25 23:00:20 +08:00
这个标题, 有的那啥了.
开源是好事, 选择使用, 就要有风险预期. 不然资深开发拿那么高工资, 是玩了. |
67
Naccl 2022-05-25 23:10:23 +08:00
代码洁癖不能忍受自己的 spring 项目额外依赖个 fastjson
|
68
Dregs2 2022-05-25 23:59:51 +08:00 via Android
vert.x 里对 jackson 的封装蛮好用的
|
69
aragakiyuii 2022-05-26 00:00:25 +08:00 via iPhone
@AlkTTT 求问一下 easyexcel 有啥替代品吗😂
|
70
leeg810312 2022-05-26 00:10:09 +08:00 via Android
.net 和 Java 都写,还是.net 好,json 序列化只有 2 个库,一个官方一个 Newtonsoft ,用到现在也没有听到哪个有重大漏洞。
|
71
seepiner 2022-05-26 00:35:29 +08:00
可以用这个封装 jackjson 的库
<dependency> <groupId>com.seepine</groupId> <artifactId>json</artifactId> <version>0.0.2</version> </dependency> 主要封装了个 J sonObject 以及提供成静态方法 JsonObject jsonObject = Json.parseObj("jsonStr"); ArrayNode arrayNode = Json.parseArray("jsonStr"); Bean bean = Json.parse("jsonStr", Bean.class); String jsonStr = Json.toJson(bean); |
72
micean 2022-05-26 00:47:18 +08:00 via Android
jackson 还是结合 kotlin 最好用
|
73
xuanbg 2022-05-26 05:02:11 +08:00
说什么 jackjson 的 api 难用的,就不能自己简单封装几个静态方法么?再说,你们都用不到深拷贝和类型转换的么?
|
74
willygeek007 2022-05-26 09:06:20 +08:00
Bugjson
|
75
bthulu 2022-05-26 09:20:38 +08:00 2
@xuanbg jackson 漏洞也没少啊。fastjson 国内用的多,尤其阿里用的多,国内好多黑灰产都在研究 fastjson 的漏洞,导致看起来 fastjson 的漏洞比 jackson 多不少。就跟 windows 上木马病毒比 linux 多一个道理,并不是 windows 不行,用的人多了,自然就有人来研究各种奇奇怪怪偏门的漏洞了,这反而证明了这个项目非常成功。
|
76
AlkTTT 2022-05-26 09:21:00 +08:00
@aragakiyuii 复杂的用原生 poi ,简单的用 hutool
|
77
wupher 2022-05-26 09:26:46 +08:00
写开源软件还真就不是轻松的活
|
78
ZeroDu 2022-05-26 10:21:49 +08:00
有一说一:fastjson api 确实易用。不用各种处理异常; 还有 nacos 确实比其他注册中心 /配置中心好用多。一套搞定不折腾
|
79
zhongjun96 2022-05-26 10:42:51 +08:00
@xuanbg 特地试了一下,怎么解析下划线和驼峰两种形式的 json ?
比如有些接口返回的 {"user_name":"aa"},有些接口{"userName":"aa"}。bean 字段 userName 。 自己封装静态方法只能指定一种映射方式,支持了下划线驼峰就会不支持。 |
80
bthulu 2022-05-26 11:14:26 +08:00
@zhongjun96 类里额外加一个 void setUser_name(xxx)的方法
|
81
mmdsun 2022-05-26 11:55:00 +08:00 via iPhone
阿里出品,必属()
|
82
zhongjun96 2022-05-26 18:38:50 +08:00
|
84
xuanbg 2022-05-27 02:21:58 +08:00
@zhongjun96 可以在 userName 字段上用 @JsonProperty("user_name")注解来指定输入的 user_name 字段对应到 bean 字段 userName
|
85
xuanbg 2022-05-27 02:31:15 +08:00
@zhongjun96 哦哦,同时支持只能加个 set 方法。。。但这似乎是代码规范化的问题吧?接口不应该有统一的数据规范么,连 key 的名称都不一样是什么鬼?是不是你还要兼容有人用 UserName ?
|
86
zhongjun96 2022-05-27 09:00:39 +08:00
@xuanbg #84 我只是举个例子。最基本的,对接多家第三方 api 的话,下划线和驼峰肯定都是有的。抽取成静态 api 的话就只能支持一种。不然就要手动加注解。实际用起来是不如 fastjson 的
|
87
golangLover 2022-05-29 16:42:13 +08:00 via Android
@dqzcwxb fj 的同一个问题出现几十次了。。。
|
88
liian2019 2022-05-31 14:10:39 +08:00
无脑喷的人多少没脑子的
|
89
Joker123456789 2022-05-31 17:47:37 +08:00
@xgfan 没有任何注解的实体类 也属于 context 吗? map 也属于吗?
|
90
Joker123456789 2022-05-31 17:51:41 +08:00
@xgfan jaskson 需要在类上 添加 @JsonIgnoreProperties(ignoreUnknown = true) 才比较保险,属不属于麻烦一点点 的范畴?
还有,不用 spring 的时候,你拿出来显摆的那些知识点,还起作用吗? |
91
6IbA2bj5ip3tK49j 2022-05-31 18:01:28 +08:00
@Joker123456789 序列化 /反序列化的配置是可以配置在 objectMapper 上。
我只会 Spring ,别的都不会,会让你开心一点吗? 你接着(spring/jackson)+fastjson 混用吧。 |
92
Joker123456789 2022-05-31 18:03:41 +08:00
@xgfan 哦,原来还要配置一下啊,这又算不算 麻烦一点点的范畴呢? 一点点。
我们争论的 焦点 在于 “一点点”。 没想到 一句 “不用 spring 的时候” 就能刺痛你, 你也是够敏感的。 最后模仿你一下,你接着 光用 spring 吧。 |
93
6IbA2bj5ip3tK49j 2022-05-31 18:07:10 +08:00
@Joker123456789 帮你捋一捋整个来龙去脉吧。
#21 ,cp19890714 发言:`我不能理解 “用 spring ,又特意改为 fastjson” 这种操作。` #32 ,你表示“没多少人特意改为吧? 接收参数,响应参数等 框架自带的功能 又没人动。 只是需要手工处理 json 的时候 采用 fastjson ,因为用起来方便,不需要自己写工具类。jackson 确实麻烦了一点点。 只是一点点。” 后续所有讨论,不都是用了 Spring 的基础上吗,你搁这儿跟我扯什么“不用 spring”呢? |
94
Joker123456789 2022-05-31 18:10:35 +08:00
@xgfan 你还帮我 捋一捋???
我:jackson 确实麻烦了一点点,只是一点点。 你:根本就没 接下来就好玩了,你接着说出了两个 “确实麻烦一点点的地方” 来证明 “他没有麻烦一点点”。 1. jackson 的 objectMapper 早就注入到 spring context 里了。 我就问你,没有任何注解的实体类,map ,list 等 属于 context 吗?? 2. 序列化 /反序列化的配置是可以配置在 objectMapper 上。 需要配置一下 属于 麻烦一点点的范畴吗??? 你连 基本的逻辑都没捋清楚,还帮我捋一捋???? |
95
6IbA2bj5ip3tK49j 2022-05-31 18:12:52 +08:00
@Joker123456789 在已经用了 Jackson 的前提下,再引入一个 fastjson 麻烦 ,还是继续使用统一的 jackson 麻烦。
这个问题都要争论,我无话可说。 |
96
Joker123456789 2022-05-31 18:17:27 +08:00
@xgfan jackson 是 spring 依赖的,我本来就需要引入 spring ,所以 jackson 的引入对我没有增加任何工作量。
我增加的工作量仅仅是 引入了一次 fastjson ,而且 一次性引入即可, 后面 我所提到的那些麻烦的点 就全都不存在了。 你信仰 jackson ,就好好信仰吧,当你喜欢一件东西的时候,他在你眼里就是完美的。 而我, 我自己写的框架里就是 jackson ,你不信的话可以去扒源码, 我是实实在在用过的人, 也是实实在在接纳了 jackson 的人, 不像你,带着偏见,在这批评一个你根本没接纳的东西。 |
97
6IbA2bj5ip3tK49j 2022-05-31 18:23:37 +08:00
@Joker123456789 确实没啥工作量,只需要出问题之后修双份漏洞而已。
别扣帽子,什么“显摆”、“信仰”、“偏见”。 我有说 fastjson 不好吗?我只是在批评“在一个项目内引入两个 json 工具”这种行为而已。 |