Вам нужно подумать о том, что конкретно означает это требование - с точки зрения вашего сервера, как он может определить, является ли входящий запрос "загрузкой Java" или нет?
Короче говоря, я не думаю, что есть способ сделать именно то, что вы ищете. Классическим способом защиты ресурсов является требование аутентификации (т. Е. Вам нужны действительные имя пользователя и пароль для получения файла index.jar), но это не похоже на то, что вам здесь нужно.
Имейте в виду, что Java просто отправляет HTTP-запросы (или другие протоколы, которые она знает, как говорить) по соединению. Любая другая программа может отправлять идентичные запросы , поэтому просто не существует способа применить этот лимит указанным вами способом.
Один из подходов, который может имитировать то, что вам нужно, - это не иметь index.jar доступным через HTTP, поэтому браузеры не смогут получить его по умолчанию, а затем получить к нему доступ через другой протокол в Java (например, FTP, SFTP, что угодно). Хотя, как уже упоминалось выше, любой инструмент, который может говорить на этом новом протоколе, сможет загрузить файл.
Другой подход заключается в поиске специфичных для Java заголовков, таких как поле User-Agent (при условии, что оно заполнено чем-то узнаваемым). Но опять же - это небезопасно, поскольку любой инструмент может отправлять через те же заголовки и выдавать себя за загрузку Java.
Если в своем вопросе вы имеете в виду, что вы хотите, чтобы ваши файлы загружались только специфичным Java-приложением, то все становится немного более осуществимым. Вы можете распространять приложение, содержащее некоторую аутентификацию (например, пару открытый / закрытый ключ), и иметь запрос на сервер для этого, когда запрашивается index.jar
. Но даже в этом случае это сомнительно - по определению приложение Java должно содержать достаточно информации, чтобы аутентифицировать себя; и по определению вы должны распространять эту информацию публично; так что не составит труда извлечь секретные ключи и использовать маскарад другого приложения в качестве вашего Java.
В принципе, я не вижу возможности обойти эту проблему, учитывая границы, которые вы указали. Если есть более узкая область, которую вы хотели бы развлечь, вы, возможно, сможете найти жизнеспособный компромисс, но прямо сейчас ответ просто «нет».