前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >垃圾sonar,心里一万只XXX

垃圾sonar,心里一万只XXX

作者头像
疯狂的KK
修改2023-02-06 18:17:20
7510
修改2023-02-06 18:17:20
举报
文章被收录于专栏:Java项目实战Java项目实战

代码申诉我写过好多次了,按理说正常的代码扫描给出的建议确实很专业,但也要看是哪款扫描软件,但就此次的sonar来说,垃圾!!!

业务负责返回前端轨迹RGB值,为了区分每次颜色区间,用随机数生成。因此用到了Random函数,本地测试环境都通过后测试后续业务,就在上午偶然想起代码检测的一些bug和漏洞,就想跟随解决,但发现一些问题。

首先扫描出的空指针问题最多,但扫描时不结合上下文判断,上文判空后,后续用到对象仍然认为没有判空,然后是漏洞扫描,除了对象内属性没有显示的声明外,报出了此次的问题

本着能发现就处理的原则,就看了下这个问题,

每次需要一个随机值时创建一个新的随机对象是低效的,并且可能会根据JDK生成非随机的数字。为了获得更好的效率和随机性,请创建一个随机文件,然后存储并重用它。

Random()构造函数每次都尝试使用不同的值设置种子。但是,不能保证种子是随机的,甚至是均匀分布的。一些JDK将使用当前时间作为种子,这使得生成的数字完全不是随机的。

此规则查找每次调用方法并将其分配给局部随机变量时创建新随机变量的情况

因为业务场景我必然需要绝对随机或者不能重复的啊!!!因此采用他的改造建议

就是用函数SecureRandom

private Random rand = SecureRandom.getInstanceStrong();

噩梦开始

本地测试请求后完美通过开始提测,又提升了代码质量,又提升了随机值效率,何乐而不为?

oh mud fuck

构建完提测,前端请求此接口超时1分钟+未返回数据???

我一开始看到前台页面是报的前端跨域,请求超时,那么找到前端看此问题,前端表示此请求是后端请求到但后端未返回数据超时

找运维,是否是网关配了超时策略,未通过响应阈值而被杀掉,并没有,也没有触发LB,可是本地好好的啊???

难道是我数据量大表查询,导致太慢???

但我一是筛选当天数据并不可能出现大数量啊?而且是测试环境啊?

没办法,开始每行打日志计算响应时间

终于,没有终于此时我构建后端超过15次,时间已经过了2个小时

终于,到我的计算RGB色码这里,他hang住了???后端死都不返回数据,他能不超时吗?

然后看我这段方法,我下午14.46对此段代码进行了优化

 try {
            random = SecureRandom.getInstanceStrong();
        } catch (NoSuchAlgorithmException e) {
            return "#000000";
        }
 public static SecureRandom getInstanceStrong()
            throws NoSuchAlgorithmException {

        String property = AccessController.doPrivileged(
            new PrivilegedAction<String>() {
                @Override
                public String run() {
                    return Security.getProperty(
                        "securerandom.strongAlgorithms");
                }
            });

        if ((property == null) || (property.length() == 0)) {
            throw new NoSuchAlgorithmException(
                "Null/empty securerandom.strongAlgorithms Security Property");
        }

        String remainder = property;
        while (remainder != null) {
            Matcher m;
            if ((m = StrongPatternHolder.pattern.matcher(
                    remainder)).matches()) {

                String alg = m.group(1);
                String prov = m.group(3);

                try {
                    if (prov == null) {
                        return SecureRandom.getInstance(alg);
                    } else {
                        return SecureRandom.getInstance(alg, prov);
                    }
                } catch (NoSuchAlgorithmException |
                        NoSuchProviderException e) {
                }
                remainder = m.group(5);
            } else {
                remainder = null;
            }
        }

        throw new NoSuchAlgorithmException(
            "No strong SecureRandom impls available: " + property);
    }

注意此方法SecureRandom generateSeed()。他使用了一个叫做阻塞数字生成器,如果没有足够的随机值来生成,那么就会一直阻塞在那里!!!

具体原因查看一下资料,但是此次的bug坑了我一下午时间!!!表示很干

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-07-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 赵KK日常技术记录 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
脆弱性检测服务
脆弱性检测服务(Vulnerability detection Service,VDS)在理解客户实际需求的情况下,制定符合企业规模的漏洞扫描方案。通过漏洞扫描器对客户指定的计算机系统、网络组件、应用程序进行全面的漏洞检测服务,由腾讯云安全专家对扫描结果进行解读,为您提供专业的漏洞修复建议和指导服务,有效地降低企业资产安全风险。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档