Tomcat e vraptor não permite download de pdf usando https

Olá Senhores, bom dia

Estou usando vraptor rodando no tomcat, minha app faz download através do FileDownload do vraptor, conforme abaixo:

         return new FileDownload(file, "application/pdf", "relatorio_", true);

Usando o https no ie que devo homologar aparece um erro e não deixa fazer o download, mas no http funciona normalmente.

Fiz um redirect do http para o https no meu tomcat, conforme abaixo:

 <Connector  
               port="80" 
               protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="443" 
	       minSpareThreads="100" 
	       maxSpareThreads="100"/>
    
<Connector 
               port="443" 
               protocol="HTTP/1.1" 
               SSLEnabled="true"
               maxThreads="150" 
               scheme="https" 
               secure="true"
               clientAuth="false" 
               sslProtocol="TLS"
	       keystoreFile="meu_arquivo.pfx" 
	       keystorePass="senha"
	       keystoreType="meu_ky_store_type"/>

Erro > "Não é possível baixar meu relatorio de meu host.com.br"

Alguém sabe o que pode ser e como posso resolver isso?

Obrigado.

lelodois, olá td bem?

vc conseguiu sumir com a tela de “Esta conexão não é confiável” utilizando 1 certificadossl??

obrigado,

att,

[quote=pedruhenrik]lelodois, olá td bem?

vc conseguiu sumir com a tela de “Esta conexão não é confiável” utilizando 1 certificadossl??

obrigado,

att,[/quote]

Sim, com cadeado e tudo.
O redirect resolveu isso para mim :slight_smile:

Alguém tem idéia de como posso resolver isso?

deve ser alguma trava do IE pra não deixar abrir pdfs de sites não confiáveis…

tenta adicionar o certificado do seu site no IE (ou pedir pra ele ignorar isso)

[quote=Lucas Cavalcanti]deve ser alguma trava do IE pra não deixar abrir pdfs de sites não confiáveis…

tenta adicionar o certificado do seu site no IE (ou pedir pra ele ignorar isso)[/quote]

Mas é uma app que será disponibilizada na internet, assim teria que configurar o ie dos meus clientes.
Vc sabe se teria como fazer isso via app?

Obrigado.

se o certificado for válido e confiável, vc não precisa configurar nos seus clientes.

tenta ver se o problema de não dar pra fazer o download é por causa do certificado mesmo…

nos outros browsers funciona?

[quote=Lucas Cavalcanti]se o certificado for válido e confiável, vc não precisa configurar nos seus clientes.

tenta ver se o problema de não dar pra fazer o download é por causa do certificado mesmo…

nos outros browsers funciona?

[/quote]

Sim, no chrome e no firefox funcionam normalmente.
O certificado está como válido e inclusive adicionei ele na lista de “sites confiáveis” do ie, mas mesmo assim não funciona.
Acredito que seja por causa do https mesmo, pois o download funciona normalmente se eu usar o http sem o redirect.

Vlw

que redirect vc está fazendo? http => https?

[quote=Lucas Cavalcanti]que redirect vc está fazendo? http => https?
[/quote]

Sim… tudo que cai no http vai para o https.

inclusive o download? ou seja, o link pro download está em http ou https?

Tudo vai para o https, inclusive o download.
O redirect eu fiz direto no server do tomcat.

Http:

<Connector port="80" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="443" 
			   minSpareThreads="100" 
			   maxSpareThreads="100"/>

Https:

	<Connector port="443" protocol="HTTP/1.1" SSLEnabled="true"
               maxThreads="150" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS"
			   keystoreFile="arquivo.pfx" 
			   keystorePass="senha"
			   keystoreType="pktype"/>

Vc faria diferente?

Você está “setando” alguma header antes do download, por exemplo, headers de no-cache? O IE não gosta disso quando você vai disponibilizar um download.

Sim…

Tenho um interceptor que seta os seguintes atributos…

		 response.setHeader("Expires", "Wed, 31 Dec 1969 21:00:00 GMT");
		 response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
		 response.setHeader("Pragma", "no-cache");

Posso testar, mas tenho que tirar o cache dos meus jsps…
E o engraçado é que em http o ie faz o download normalmente, mas em https não…

Sim…

Tenho um interceptor que seta os seguintes atributos…

		 response.setHeader("Expires", "Wed, 31 Dec 1969 21:00:00 GMT");
		 response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
		 response.setHeader("Pragma", "no-cache");

Posso testar, mas tenho que tirar o cache dos meus jsps…
E o engraçado é que em http o ie faz o download normalmente, mas em https não…[/quote]

Showwwww garcia, resolvido!

Era cache mesmo.

Meu interceptor ficou assim: (Quando o retorno do vraptor é fileDownload eu não limpo o cache)



               if (this.limparCache(method) == true) {
			response.setHeader("Expires", "Wed, 31 Dec 1969 21:00:00 GMT");
			response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
			response.setHeader("Pragma", "no-cache");
		}

        private boolean limparCache(ResourceMethod method) {
		boolean valor = true;
		if (method != null && method.getMethod() != null && method.getMethod().getReturnType() != null)
			valor = method.getMethod().getReturnType().toString().contains("FileDownload") == true;
		return !valor;
	}

Obrigadãooo pessoal, vlw.

Abraços.

Muito boa a solução.

O Lucas pode me corrigir se eu estiver errado, mas você não precisa de todos esses ifs, ja que method e method.getMethod nunca são nulos, e o mesmo vale para o getReturnType(). Eu faria algo assim apenas:

o isAssignableFrom é ao contrário :wink:

Download.class.isAssignableFrom(method.getMethod().getReturnType());

Valeu pessoal.

Obrigadão, valeu pelas dicas!

Mais que resolvido!
abraços, tenham um bom dia.

lelodois ! [resolvido] no título

Abraço !
jr

ops…
pensei que já tinha colocado rs

Edit…

na verdade coloco o [Resolvido] mas não aparece…
estranho…
vlw

diminui o tamanho do titulo !