V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
VeryZero
V2EX  ›  程序员

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

  •  
  •   VeryZero · Jan 7, 2021 · 4462 views
    This topic created in 1936 days ago, the information mentioned may be changed or developed.

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

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

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

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

    19 replies    2021-03-07 22:14:12 +08:00
    hantsy
        1
    hantsy  
       Jan 7, 2021
    一系列的 Filter 上了,肯定影响性能啊。

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

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

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

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

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