使用 Spring Security 后性能相差 2-4 倍?是我自己的问题吗?

2021-01-07 19:10:35 +08:00
 VeryZero

测试环境: 硬件:MacbookPro 8 核 16G 软件:JMeter 1000 线程每秒,SpringBoot2.2.10

禁用 Spring Security,吞吐量约 20000 左右 启用 Spring Security,吞吐量下降为 5000 左右

Spring Security 里面的逻辑基本都删了,只留了下一些 antMatchers 和 mvcMatchers,大概看了下主要衰减应该就是因为这些 Matchers 。有衰减很正常,但是这衰减幅度很让我吃惊的。

在网上找了一圈,没找到有人谈论这个,难道是我环境有问题?

4049 次点击
所在节点    程序员
19 条回复
hantsy
2021-01-07 19:15:54 +08:00
一系列的 Filter 上了,肯定影响性能啊。

不需要完全处理,直接跳过去啊。
hantsy
2021-01-07 19:22:03 +08:00
xbh1794970183564
2021-01-07 19:33:37 +08:00
mbp 性能这么屌,吞吐能到 2w ?
KevinBlandy
2021-01-07 19:40:19 +08:00
有些简单的权限,登录。。根本没必要用这个东西,Filter/Intercptor 就能解决。
qwerthhusn
2021-01-07 19:45:24 +08:00
我感觉 Spring Security 太过于复杂了

现在基本上都是做 API 开发,直接一个 Interceptor 拿到 Token 做一下认证鉴权,把用户 id 啥的写到 attribute 里面去,直接就去 Controller 跑代码了,清晰直观。
VeryZero
2021-01-07 19:53:59 +08:00
@hantsy 他需要通过路径匹配决定是跳过还是进行权限校验。我感觉慢就慢在路径匹配这一步。具体是不是明天接着测
VeryZero
2021-01-07 19:56:06 +08:00
@qwerthhusn 是的,太复杂了。用在好几个项目了,还是没完全玩转。如果这么大性能损耗确实存在,下个项目不想再用了。。
hantsy
2021-01-07 19:58:51 +08:00
@VeryZero
SpringSecurityConfigurger 中常见的两个方法:

configure(WebScurirty) 决定哪些要通过 Spring Security Filter,这个决定哪个路径要不要用 Spring Filter 。一般这里都是过滤掉静态资源( css, js, swagger-ui 等)。

configure(HttpSecurity) 才是安全配置,每个 Path 检测的目的不一样,导致的不同 Filter 应用上去。
hantsy
2021-01-07 20:00:19 +08:00
@qwerthhusn 你这个玩法可以是可以。自己玩玩没问题的。
hantsy
2021-01-07 20:04:51 +08:00
性能相差 2-4 倍?我觉得主要取决你的程序复杂度,如果以一个基本的 CRUD,包含数据库操作等等,应该不会那么大。在实际应用中单纯的测试一个纯 Web 层,什么都不做有什么意义?
alex8
2021-01-07 22:11:24 +08:00
基于 Redis 自己写 AOP 做鉴权
uselessVisitor
2021-01-08 08:09:44 +08:00
这东西太重了,如果用不到 rbac 就不用了吧。。
tomsun28
2021-01-08 09:36:02 +08:00
过滤链 ant 匹配问题 记得他和 shiro 都是过滤链一个一个对请求匹配的 可以考虑下 sureness https://github.com/tomsun28/sureness/blob/master/docs/design.md
xuanbg
2021-01-08 10:06:02 +08:00
路径匹配不要傻乎乎地去遍历,没有路径变量的 url 可以用 hashmap,一下子就从 O(n)变成 O(1)
fpure
2021-01-08 11:15:34 +08:00
Spring Security 太复杂太难用了,我自己写个过滤器拦截器简单多了,要实现 rbac 也简单。不理解为什么鉴权这么简单的业务大家却要使用这么复杂难用的框架
cs419
2021-01-08 19:28:11 +08:00
security 的主要运行流程不是很难
坑爹的地方在于 逼着大伙用 配置类去初始化它
http.userdetailService(detailService) http.xxxConfigure http.xxx.disable 等等
这些玩意用起来倒是简单, 想定制的复杂点,就绕的慌,啰嗦的不行

风气就是从 spring boot 那时候搞坏的,xml 的配置方式,啰嗦但结构清晰
到了 boot 的时代,自动化配置类,各种条件装配, 程序的装载是动态化了
想看懂主要结构 头都大了
echo1937
2021-01-08 21:00:12 +08:00
@cs419 #16 一样的配置,用 Java Config 绝对比 XML 简单有效
Veneris
2021-01-08 21:52:40 +08:00
借楼问一下,做后端管理的权限有没有什么简洁轻量多框架,就是控制角色能看到,访问哪些页面和按钮
chrisia
2021-03-07 22:14:12 +08:00
你的密码加密方式是不是用了 bcrypt, PBKDF2, scrypt 。这种吞吐量本身很低,但是足够安全,没有任何的框架能够同时满足安全性和性能,可以参考一下 springsecurity 的官方文档。如果在乎性能可以用 SHA-256 这种,但是会有彩虹表攻击的危险。建议适当降低 bcrypt 的安全强度,找到一个平衡点。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/742661

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX