Sonar抱怨我的Scala代码需要使用其他API来显式指定字符集名称或Charset对象。
public interface VersionRepositoryExtended extends CrudRepository<Version, Long> {
@Procedure(procedureName = "getVersionByName")
public Version getVersionListedName(@Param("name") String name);
}
// sonar抱怨java / io / File。(Ljava / lang / String;)V读取了一个文件,该文件的位置可能由用户输入指定
声纳还指出“使用备用API并明确指定字符集名称或字符集对象”
class UpdatePartitionsFile(val sparkSession: SparkSession, val tableName:
String, val partitionsfilePath: String) {
....
def getPartitions: (String, String) = {
val partitionsFile = new File(partitionsfilePath);
我应该从这里改变什么? 感谢任何建议和帮助
答案 0 :(得分:1)
PrintWriter(File file)
使用Java虚拟机的默认字符集。默认字符集在虚拟机启动期间确定,通常取决于基础操作系统的语言环境和字符集。为了确定起见,您应该使用PrintWriter(File file, String csn)
。例如,要确保始终使用UTF-8,您可以编写new PrintWriter(partitionsfilePath, StandardCharsets.UTF_8.name())
答案 1 :(得分:0)
对于File输入,Sonar认为您是根据用户指定输入路径(的一部分)从文件系统中加载文件的。根据您对文件的处理方式,需要使输入变大,以确保用户无法通过目录遍历(例如../../../../../../etc/passwd
)来基于文件提供的输入来读取或覆盖文件。
对于字符编码部分,您需要使用OuputStreamWriter
来指定编码,并将其包装在FileOutputStream
周围:
val writer = new OutputStreamWriter(new FileOutputStream(partitionsfilePath), StandardCharsets.UTF_8);