記錄安全掃描後進行的代碼重構各種問題以及處理辦法

項目由於是政府的項目,須要對代碼進行安全掃描,花了點時間對代碼進行重構,因此對問題作下記錄,你們有更好的解決辦法歡迎指出,會隨時進行補充問題java

1Either log or rethrow this exception.(日誌或從新拋出此異常。express

處理方式:在catch中加上打印日誌設計模式

          logger.error("添加的說明信息 ",e);安全

2Remove this useless assignment to local variable "XXX".(刪除這個無用的賦值到局部變量「XXX」)session

處理方式:將這兩段代碼合併爲一列 List<String> timelist = getTimeList();less

3This block of commented-out lines of code should be removed.(刪除這段註釋掉的代碼塊)工具

處理方式:直接將註釋的代碼刪除ui

4Define a constant instead of duplicating this literal "repeatData" 3 times.(定義一個常量,而不是重複這個「repeatData」3次。this

例子:在一個類裏面屢次使用了同樣的字符串文本spa

處理方式:定義類常量或者枚舉類或者接口常量類,用常量來代替重複的文本

5duplicated blocks of code must be removed.(必須刪除重複的代碼塊。)

這類問題在代碼重構是碰到最多的

處理方式:抽取重複的代碼塊做爲一個共用的方法或者抽取工具類方法

6Refactor this code to not nest more than 3 if/for/while/switch/try statements.(重構此代碼以不嵌套超過3 if/for/while/switch/try語句。)

這也是最多見的問題 嵌套if for過多

解決辦法:1抽取方法,

                2.使用設計模式

                3. 採用衛語句

7.Refactor this method to reduce its Cognitive Complexity from 48 to the 15 allowed.(重構這種方法,將其認知複雜性從48下降到15。)

表示一個方法行數不少比較複雜,一樣的解決辦法就是抽取方法,講一個方法拆分幾個方法

8.Method has 9 parameters, which is greater than 7 authorized.(方法有9個參數,大於7個受權參數。)

一個方法參數過多,解決辦法封裝成對象或者map

9Replace the synchronized class "StringBuffer" by an unsynchronized one such as "StringBuilder".(將同步類「StringBuffer」替換爲非同步類,例如「StringBuilder」。)

其實若是用StringBuffer時 jdk也會進行鎖消除的

10Refactor this method to throw at most one checked exception instead of: java.lang.NoSuchMethodException, java.lang.IllegalAccessException, java.lang.reflect.InvocationTargetException(重構此方法以拋出最多一個檢查異常)

解決辦法:自定義運行時異常,或者拋出更大的異常

11NullPointerException might be thrown as 'session' is nullable here(可能會拋出NullPointerException,由於「session」在這裏是可空的)

處理方式:加一個非空判斷

12Close this "InputStreamReader".(關閉這個「InputStreamReader」。)

輸入輸出流在finally中進行關閉

13、Add a nested comment explaining why this method is empty, throw an UnsupportedOperationException or complete the implementation.(添加一個嵌套註釋,解釋爲何這個方法是空的,拋出UnsupportedOperationException,或者完成這個實現。)

處理方式:由於不須要實現這個方法因此直接添加註釋解釋一下

14Make "modelparam" transient or serializable.

 

頂層接口對象或者抽象類的引用是沒有實現序列化接口的,因此實體實現了系列化的時候,這些頂層接口的引用編譯時沒法肯定類型

解決方法:

  1. 使用實現了序列化接口的子類
  2. 使用transient關鍵字表示不序列化該字段

15Reduce the number of conditional operators (7) used in the expression (maximum allowed 3).

一個if的條件表達式過多問題

解決辦法提取表達式成爲一個方法

變動前:

變動後:

相關文章
相關標籤/搜索