Как я могу защитить код Java / Javafx от просмотра конечным пользователем?

Проблема в том, что ваш udf возвращает массив строк вместо массива карт. Вы можете снова проанализировать строку с помощью библиотеки json или просто изменить свой udf, чтобы вернуть правильный тип:

@udf("map<string, array<map<string, array<int>>>>")
def parse(s):
    try:
        return json.loads(s)
    except:
        pass

Это вернет ожидаемый тип (массив словарей со строковыми клавишами и значениями из целых массивов).

df.select("id", "date", explode(parse("users")).alias("tier_id", "user_list"))\
    .withColumn("user_list", explode("user_list"))\
    .select("id", "date", "tier_id", explode("user_list").alias("user", "drill")).show()

# +---+----------+-------+-----+--------------------+
# | id|      date|tier_id| user|               drill|
# +---+----------+-------+-----+--------------------+
# |  1|2017-12-03|      1| john|      [12443, 12441]|
# |  1|2017-12-03|      1| mike|      [15284, 15280]|
# |  1|2017-12-03|      1|james|[14380, 14379, 13...|
# |  1|2017-12-03|      2|julio|             [15284]|
# |  1|2017-12-03|      2|brian|      [15284, 15280]|
# |  1|2017-12-03|      2|  org|                  []|
# |  2|2017-12-04|      1| john|      [12443, 12441]|
# |  2|2017-12-04|      1| mike|      [15284, 15280]|
# |  2|2017-12-04|      1|james|[14380, 14379, 13...|
# |  2|2017-12-04|      2|brian|      [15284, 15280]|
# +---+----------+-------+-----+--------------------+

Обратите внимание, что вам нужно дважды взорваться user_list, потому что он начинается как массив карт, а не тип карты.

1
задан halfer 22 January 2019 в 22:32
поделиться

1 ответ

В настоящее время я работаю в компании, у которой есть код, к которому мы не хотим, чтобы кто-то имел доступ для безопасности наших клиентов и - что менее важно - по юридическим причинам. ; -)

Одним из возможных решений, которое вы могли бы найти, было бы переписать код, который вы считаете наиболее чувствительным, в библиотеку C / C ++. Можно было бы скомпилировать это в файл .so / .dll / .dylib для соответствующих ОС, и это усложнило бы, не совсем невозможно, но трудно декомпилировать.

Проблема заключается в том, чтобы узнать, как получить доступ к нативному коду из Java, так как большая часть документации не является полезной или просто отсутствует. Это будет использовать Java Native Interface (JNI), который позволяет Java взаимодействовать с собственным (скомпилированным C / C ++) кодом. Это позволило бы создать файл Jar, который фактически стал бы библиотекой Java, к которой вы могли бы обращаться на протяжении всего остального проекта. Однако нативный код по-прежнему необходимо загружать во время выполнения, но это помимо изучения того, как работает JNI. Полезная ссылка, которую я нашел для JNI, - http://jnicookbook.owsiak.org/ (пока это все еще функциональная ссылка).

Один из наших клиентов, где я работаю, имеет проект, написанный на Java, и ему нужно было реализовать наш код, который, к сожалению, полностью написан на C. Поэтому нам нужен был способ доступа к этому коду C / C ++ из Java. Именно так мы решили эту проблему, не переписывая наш код на Java. Но у нас было преимущество (?) В том, что мы уже написали наш код на языке C.

Это решение, позволяющее написать кучу дополнительного кода в последнюю минуту на другом языке, с которым я могу или не могу быть знаком, не звучит как особенно веселое время.

Мне было бы интересно узнать, какие возможные проблемы могут возникнуть у других с этим решением.

0
ответ дан halfer 22 January 2019 в 22:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: