Já fiz alguma coisa meio parecida usando .NET. A idéia era usar IO não-bloqueante e fazer o processo de geração de arquivo em uma Thread separada, para liberar a thread principal para outras coisas. Então, se eu fosse fazer algo parecido com isso em Java, misturaria NIO+Threads e mandava ver.
depois de gerado, vc pode zipar o arquivo e enviar para o usuario.
Se o tempo for muito demorado, vc faz uma servlet que gera, e depois
que terminar vc rediciona para o download (mais ou menos como
funciona o esquema de pesquisa desse forum).
Suponha que vc. esteja rodando num containner de servlet. Sendo assim a autenticacao fica por conta do sessoes.
Sinceramente acho que isto é mais uma das idéia mirabolantes do pessoal daqui.
Um dos distribuidores quer que uma aplicação deles vá buscar o arquivo de tempos em tempos para atualizar a base deles.
Sugerí então de manter a funcionalidade do site, porém adicionar um Servlet que faria isso, inclusive autenticando o usuário. Esse Servlet retornaria o código HTTP como respostas. Se for código 400, então o arquivo vem no body http. Se for 403, é erro de permissão e etc.
É melhor não querer reinventar a roda nem complicar para uma coisa simples.
Tem que ser via http? Senão vc gera o arquivo de tempos em tempos e joga num diretório mapeado em um servidorzinho ftp ai, dai a aplicação do cara se loga no ftp e puxa o arquivo. (EAI CTRL-M)