Мне нужно поддерживать встроенную защиту SQLServer в моем приложении, скрывать настройку java.library.path от пользователей и встраивать ее как часть инициализации класса.Я хотел бы встроить dll в мой dbclient.jar, и пользователь, использующий мой jar, не должен предоставлять свою собственную dll, если он хочет инициализировать способ интегрированной безопасности SQL Server.
Пример ниже работает, но этовынуждает пользователя указывать путь к библиотеке.
private void setLibraryPath(String path) {
System.setProperty("java.library.path", path);
try {
final Field sysPathsField = ClassLoader.class.getDeclaredField("sys_paths");
sysPathsField.setAccessible(true);
sysPathsField.set(null, null);
} catch (Exception e) {
throw new RaptorException("Failed to set library path ", e);
}
}
public DBClientActor(
DatabaseType databaseType,
String userName,
String password,
String connectionUrl,
String libraryPath) {
Objects.requireNonNull(connectionUrl, "Connection URL cannot be null");
if (databaseType != null && !connectionUrl.startsWith("jdbc")) {
String[] connectionUrlParts = connectionUrl.split(":");
if (databaseType != DatabaseType.KDB) {
connectionUrl =
String.format(
databaseType.connectionUrlTemplate,
connectionUrlParts[0],
Integer.parseInt(connectionUrlParts[1]),
connectionUrlParts[2]);
}
}
if (StringUtils.isNotEmpty(libraryPath)) {
//C:/sqljdbc_auth/x64
setLibraryPath(libraryPath);
}
}
Я ожидаю, что пользователь сможет инициализировать предоставленный ему мой jar-клиент db без необходимости указывать свой путь к библиотеке.Как я могу это сделать?