Я думаю, что вы не запускаете генерацию отчетов в другой теме.Лучше запустить генерацию отчета в другом потоке и отправить ссылку обратно пользователю, когда он будет готов.
Вы можете использовать ExecutorService из java и установить некоторое время ожидания для потока, и он истечет, если потребуется большечем время, выделенное для этого.
Поиск Java ExecutorService, Future, Callable tutorial
Пример кода:
Callable<Integer> callable = new CallableImpl(2);
ExecutorService executor = new ScheduledThreadPoolExecutor(5);
Future<Integer> future = executor.submit(callable);
Integer result = future.get(600,TimeUnit.seconds));