demoiselle / framework

Repositório principal contendo o Core e Extensions: JPA, Security, WS
https://demoiselle.org
127 stars 77 forks source link

[Demoiselle 3] CORS #95

Closed lucasbmonteiro closed 6 years ago

lucasbmonteiro commented 7 years ago

Olá,

Trata-se de problema relacionado a cross-domain na versão 3 do Demoiselle. Tentamos seguir as instruções contidas no link https://demoiselle.gitbooks.io/documentacao-jee/content/cors.html, porém só funcionou com GET. Nos outros casos, o browser tenta fazer um "preflighted request" com OPTIONS, e não funciona. Também tentamos chamar o OPTIONS com outro cliente http e não funcionou.

Alguma dica? Grato!

PauloGladson commented 7 years ago

@lucasbmonteiro ,

Vamos lá:

O CORS é um sistema de segurança onde o browser "respeita" um pedido do servidor, para isso você pode colocar as configs no header das requisições, no d3 via demoiselle.properties(https://demoiselle.gitbooks.io/documentacao-jee/content/cors.html), esses pedidos para os navegadores serão enviados em todos os pedidos. A anotação @Cors(enabled = "false" ou "true") você pode colocar no recurso ou na classe(vale para todos os recursos), você pode testar isso no exemplo (https://github.com/demoiselle/example/tree/master/v3/forum). Alguns frameworks de frontend fazem um chamado options antes de cada chamada dos recursos para receber do servidor "instruções" sobre o recurso, se bem configurado o cors é uma ótima opção de segurança.

PauloGladson commented 7 years ago

@lucasbmonteiro

Um exemplo de acesso onde o cors é totalmente desabilitado, https://github.com/demoiselle/example/tree/master/v3/cep

ronenramallo commented 7 years ago

@PauloGladson

Testei a aplicação de exemplo "forum" conforme sugerido e o mesmo problema acontece. Os browsers Chrome e Firefox tentam fazer um preflighted request usando o método http OPTIONS e a chamada retorna erro 500 do servidor. O problema na aplicação forum ocorreu na funcionalidade "inclusão de categoria". A aplicação foi implantada no servidor JBoss EAP 7.

thiagosoares commented 7 years ago

O problema relatado pelo @ronenramallo ocorre no org.demoiselle.jee.security.filter.CorsFilter.filter(CorsFilter.java:47) e é o seguinte: RESTEASY003880: Unable to find contextual data of type: javax.ws.rs.container.ResourceInfo.

Por algum motivo não foi possível injetar o ResourceInfo com @Context neste ContainerResponseFilter para esta requisição.

Trata-se, na verdade, de um Bug do próprio RestEasy e existe um PR que trata disso (https://github.com/resteasy/Resteasy/pull/785), mas eu não sei em qual versão ele foi incorporado.

A versão do RestEasy no EAP 7.0 é 3.0.16. Talvez seja interessante atualizar os módulos do RestEasy no EAP para um teste.

ronenramallo commented 7 years ago

@thiagosoares

Atualizando a versão do resteasy para a 3.0.19 funcionou.

Obrigado!

PauloGladson commented 7 years ago

@ronenramallo , as versões do Wildfly 10.1.0-Final e do EAP 7.0.4 tem essa correção.

PauloGladson commented 7 years ago

@lucasbmonteiro , as informações resolveram o problema?

lucasbmonteiro commented 7 years ago

Resolveram sim, @PauloGladson . Obrigado!