Я считаю, что вы должны разрешить IIS обслуживать статические файлы. У вас может быть HttpModule (или ваш фильтр), передающий управление обратно в IIS - это означает, что код принудительной защиты может быть реплицирован. Еще один подход может заключаться в том, чтобы вернуть управление передачей сервера приложений в IIS для работы с файлом (проверка безопасности, конечно, произойдет раньше). Или, наконец, как указано вами, ваш сервер приложений может добавлять заголовки ответов, а затем httpmodule будет читать их и передавать управление IIS. Не уверен, что в java, но в .NET вы можете использовать метод HttpResponse.TransmitFile для передачи обратно управления IIS - это должно избежать необходимости делать файл HttpModule служить.
Наконец, для кэширования вы всегда можете испускать заголовки кеша в ответ на понижающий уровень (кэширование прокси или клиентской стороны). Если файлы меняются, вы можете добавить файловую зависимость и т. Д.
EDIT: Не уверен, что это сработает для вас. Создайте обработчик http (ashx) и пометьте его как SSL, требуемый в IIS. Этот мультимедийный файл будет обслуживаться этим обработчиком. Обработчик возьмет файл для обслуживания в качестве параметра запроса. Теперь вы можете передать некоторый идентификатор файла или зашифрованный частичный путь (относительно настроенного базового пути к хранилищу файлов), чтобы фактическое имя файла или пути не были видны пользователю. Вы даже можете сделать маркеры, срок действия которых истекает через некоторое время (по существу, добавьте идентификатор файла & и отметьте его), чтобы пользователь не мог снова запросить тот же файл с использованием того же параметра. Псевдо-код для обработчика будет
void ProcessRequest(HttpContext context)
{
// read file id/name token
var token = context.Request["q"];
// validate/decrypt token etc and get the actual path for file to be served
string filePath;
// set needed response headers - content-type, content-disposition and cache related
...
// ask IIS to serve the file
context.Response.TransmitFile(filePath);
}
+1 Любое предложение о том, как отправлять информацию о безопасности между сервером приложений и IIS, если у меня есть последние, обслуживает? И, если бы я пошел с моим предложенным подходом, это выглядит как preSendRequestContent и preSendRequestHeaders, вероятно, это два метода, с которыми я хочу работать на httpmodule? И я могу отправить информацию через заголовки ответов, которые IIS может читать? – orangepips
В вашем предлагаемом подходе ваш сервер приложений будет Http-обработчиком, поэтому IMO, вы можете использовать «PostRequestHandlerExecute» в модуле http - это будет означать, что приложение Server выполнило с запросом и могло добавить заголовки, которые будут сообщать вашему модулю, что этот запрос должен обслуживаться IIS. Также см. Мое редактирование для альтернативного подхода. Надеюсь это поможет! – VinayC