Tenho um problema com a chamada de um Servlet via Flex. Ao clicar em um botão, o sistema Flex deve chamar um Servlet para enviar um e-mail. Passo os parâmetros pela url. Isso funciona bem, porém quando um usuário externo a rede tenta utilizar essa aplicação, o Flex apresenta erro de violação de segurança e não faz a chamada ao Tomcat. A explicação para isso é óbvia: o aplicativo em flash roda no cliente e o Servlet roda no servidor, como o Tomcat não pode ser acessado externamente, ocorre o erro.
Eu pensei em uma solução. Como aqui o Apache e o Tomcat estão não mesma máquina, eu faria uma chamada via AMFPHP a uma função PHP que, por sua vez chamaria a url do Tomcat. Como eu faria isso, de modo que não seja aberta nenhuma nova janela (página)?
Flex + php + java servlet [resolvido]
5 Respostas
Eugênio,
Pelo q eu entendi a tua aplicação esta na tua máquina de desenvolvimento?
Pelo seguinte, por segurança o Flash Player não permite q o swf acesse outro servidor q não o seu, só é permitido se o servidor externo tem o crossdomain.xml informando q o servido está autorizado.
Qd vc roda do Flex Builder o teu swf pode acessar qq servidor, pq teoricamente vc está num ambiente seguro.
Dá uma olhada na tua estrutura talvez seja isso.
[]s
Oi Eugênio
Não existem problemas em acessar um Servlet de uma aplicação Flex, a única coisa que você deve respeitar (como o Fábio falou):
- Se você acessa a sua aplicação de http://www.meudominio.com/flex/Index.html, a chamada deve ir para http://www.meudominio.com/flex/servlet
- Caso você deseje acessar outro domínio, o domínio deve permitir esse acesso, dado as políticas de segurança do Flash Palyer. Ex. para acessar um serviço em www.guj.com.br, o domínio deve permitir e para isso utilizamos um arquivo chamado crossdomain.xml
- Se o domínio não permite o acesso, você poderá fazer atravéz de proxy (verifique as configurações de proxy do BlazeDS), ou seja, a chamada do Flex é feita para o seu dominio que consulta o serviço bloqueado e retorna para o Flex.
Você relatou que o tomcat está bloqueado? Mais o cliente tem acesso a aplicação Flex?
[]s,
Oi EugênioNão existem problemas em acessar um Servlet de uma aplicação Flex, a única coisa que você deve respeitar (como o Fábio falou):
- Se você acessa a sua aplicação de http://www.meudominio.com/flex/Index.html, a chamada deve ir para http://www.meudominio.com/flex/servlet
- Caso você deseje acessar outro domínio, o domínio deve permitir esse acesso, dado as políticas de segurança do Flash Palyer. Ex. para acessar um serviço em www.guj.com.br, o domínio deve permitir e para isso utilizamos um arquivo chamado crossdomain.xml
- Se o domínio não permite o acesso, você poderá fazer atravéz de proxy (verifique as configurações de proxy do BlazeDS), ou seja, a chamada do Flex é feita para o seu dominio que consulta o serviço bloqueado e retorna para o Flex.
Você relatou que o tomcat está bloqueado? Mais o cliente tem acesso a aplicação Flex?
[]s,
Henrique, o Servlet precisa estar exatamente no mesmo diretório do Flex?
O sistema Flex está em
www.meudominio.com.br/sistemas/rotas, e o Servlet está em http://ip_do_meu_domínio:8081/ServidorDeRelatorios/EnvioEmail. O Endereço do Tomcat não pode ser acessado externamente, será preciso liberar acesso externo à porta 8081 para que funcione o crossdomain?
Oi Eugenio,
meudominio.com.br é diferente de 192.168.16.5 (ou o ip) ou até mesmo localhost. Isso fará com que o Flex precise de um crossdomain para funcionar. No seu caso, a configuração do tomcat está a seu alcance, ou seja, você pode colocar o arquivo crossdomain.xml liberando somente meudominio.com.br sem problemas, entendeu?
[]s,
Resolvido, criei o arquivo crossdomain.xml permitindo acesso do ip onde está o sistema Flex e salvei na pasta …/tomcat/webapps/ROOT.
Muito obrigado.