V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
VeryZero
V2EX  ›  程序员

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

  •  
  •   VeryZero · 2021-01-07 19:10:35 +08:00 · 4017 次点击
    这是一个创建于 1416 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    19 条回复    2021-03-07 22:14:12 +08:00
    hantsy
        1
    hantsy  
       2021-01-07 19:15:54 +08:00
    一系列的 Filter 上了,肯定影响性能啊。

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

    现在基本上都是做 API 开发,直接一个 Interceptor 拿到 Token 做一下认证鉴权,把用户 id 啥的写到 attribute 里面去,直接就去 Controller 跑代码了,清晰直观。
    VeryZero
        6
    VeryZero  
    OP
       2021-01-07 19:53:59 +08:00
    @hantsy 他需要通过路径匹配决定是跳过还是进行权限校验。我感觉慢就慢在路径匹配这一步。具体是不是明天接着测
    VeryZero
        7
    VeryZero  
    OP
       2021-01-07 19:56:06 +08:00
    @qwerthhusn 是的,太复杂了。用在好几个项目了,还是没完全玩转。如果这么大性能损耗确实存在,下个项目不想再用了。。
    hantsy
        8
    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
        9
    hantsy  
       2021-01-07 20:00:19 +08:00
    @qwerthhusn 你这个玩法可以是可以。自己玩玩没问题的。
    hantsy
        10
    hantsy  
       2021-01-07 20:04:51 +08:00
    性能相差 2-4 倍?我觉得主要取决你的程序复杂度,如果以一个基本的 CRUD,包含数据库操作等等,应该不会那么大。在实际应用中单纯的测试一个纯 Web 层,什么都不做有什么意义?
    alex8
        11
    alex8  
       2021-01-07 22:11:24 +08:00
    基于 Redis 自己写 AOP 做鉴权
    uselessVisitor
        12
    uselessVisitor  
       2021-01-08 08:09:44 +08:00
    这东西太重了,如果用不到 rbac 就不用了吧。。
    tomsun28
        13
    tomsun28  
       2021-01-08 09:36:02 +08:00
    过滤链 ant 匹配问题 记得他和 shiro 都是过滤链一个一个对请求匹配的 可以考虑下 sureness https://github.com/tomsun28/sureness/blob/master/docs/design.md
    xuanbg
        14
    xuanbg  
       2021-01-08 10:06:02 +08:00
    路径匹配不要傻乎乎地去遍历,没有路径变量的 url 可以用 hashmap,一下子就从 O(n)变成 O(1)
    fpure
        15
    fpure  
       2021-01-08 11:15:34 +08:00
    Spring Security 太复杂太难用了,我自己写个过滤器拦截器简单多了,要实现 rbac 也简单。不理解为什么鉴权这么简单的业务大家却要使用这么复杂难用的框架
    cs419
        16
    cs419  
       2021-01-08 19:28:11 +08:00
    security 的主要运行流程不是很难
    坑爹的地方在于 逼着大伙用 配置类去初始化它
    http.userdetailService(detailService) http.xxxConfigure http.xxx.disable 等等
    这些玩意用起来倒是简单, 想定制的复杂点,就绕的慌,啰嗦的不行

    风气就是从 spring boot 那时候搞坏的,xml 的配置方式,啰嗦但结构清晰
    到了 boot 的时代,自动化配置类,各种条件装配, 程序的装载是动态化了
    想看懂主要结构 头都大了
    echo1937
        17
    echo1937  
       2021-01-08 21:00:12 +08:00
    @cs419 #16 一样的配置,用 Java Config 绝对比 XML 简单有效
    Veneris
        18
    Veneris  
       2021-01-08 21:52:40 +08:00 via iPhone
    借楼问一下,做后端管理的权限有没有什么简洁轻量多框架,就是控制角色能看到,访问哪些页面和按钮
    chrisia
        19
    chrisia  
       2021-03-07 22:14:12 +08:00
    你的密码加密方式是不是用了 bcrypt, PBKDF2, scrypt 。这种吞吐量本身很低,但是足够安全,没有任何的框架能够同时满足安全性和性能,可以参考一下 springsecurity 的官方文档。如果在乎性能可以用 SHA-256 这种,但是会有彩虹表攻击的危险。建议适当降低 bcrypt 的安全强度,找到一个平衡点。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1682 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 16:48 · PVG 00:48 · LAX 08:48 · JFK 11:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.