Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Minha servlet não passa pelo Filter

@WebServlet("/empresa")
public class EmpresaService extends HttpServlet {
    private static final long serialVersionUID = 1L;


    protected void service(HttpServletRequest request, HttpServletResponse response) throws IOException {        

        List<Empresa> listaEmpresa = new BancoDados().getListaEmpresa();


        Gson gson = new Gson();        
        String json = gson.toJson(listaEmpresa);


        response.setContentType("application/json");
        response.getWriter().print(json);

    }

}

Oláa, Aluleiros. Em aulas anteriores aprendi a construir filtros, então exite um Filter Controle, todas minhas páginas passam por ele. Porém estou aprendendo a trabalhar com WebServices, percebi que ele não passa pelo Filter, posso chamar esta servlet direto no browser sem passar pelo Filter. Alguém sabe me explicar o motivo de não passar pelo Filter. Obrigado

5 respostas

Oi Luciano,

Como está a configuração do seu filter no seu web.xml? Posta o código dele também, por favor.

Abraço!

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>projeto_04</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <filter>
    <filter-name>Monitoramento</filter-name>
    <filter-class>br.com.alura.filter.MonitoramentoFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>Monitoramento</filter-name>
    <url-pattern>/entrada</url-pattern>
  </filter-mapping>
  <filter>
    <filter-name>AutorizacaoFilter</filter-name>
    <filter-class>br.com.alura.filter.AutorizacaoFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>AutorizacaoFilter</filter-name>
    <url-pattern>/entrada</url-pattern>
  </filter-mapping>
  <filter>
    <filter-name>CF</filter-name>
    <filter-class>br.com.alura.filter.ControladorFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>CF</filter-name>
    <url-pattern>/entrada</url-pattern>
  </filter-mapping>
</web-app>
solução!

Oi Luciano! tudo bem?

Penso que seu problema pode estar relacionado com os mapeamentos.

Seu filtro está mapeado no caminho /entrada.

Seu servlet, por outro lado está mapeando o caminho /empresa.

Se sua intenção de segurança é interceptar toda as chamadas para o Servlet, sugiro deixar genérico como /*, caso contrário, coloque /empresa que deve funcionar apenas para o servlet em questão.

exemplos de mapeamento do filtro:

<url-pattern>/*</url-pattern> - Filtra todas as requisições
<url-pattern>/entrada/*</url-pattern> - Filtra tudo que começa com entrada
<url-pattern>/empresa/*</url-pattern> - Filtra tudo que começa com empresa

Espero ter ajudado,

Abraço e sucesso,

Rodrigo

Conforme mencionado pelo Rodrigo, o seu arquivo web.xml vai ficar com um pattern mais genérico (usando *):

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>projeto_04</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <filter>
    <filter-name>Monitoramento</filter-name>
    <filter-class>br.com.alura.filter.MonitoramentoFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>Monitoramento</filter-name>
    <url-pattern>/entrada</url-pattern>
  </filter-mapping>
  <filter>
    <filter-name>AutorizacaoFilter</filter-name>
    <filter-class>br.com.alura.filter.AutorizacaoFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>AutorizacaoFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <filter>
    <filter-name>CF</filter-name>
    <filter-class>br.com.alura.filter.ControladorFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>CF</filter-name>
    <url-pattern>/entrada</url-pattern>
  </filter-mapping>
</web-app>

Dessa forma todas as requisições irão passar pelo filter AutorizacaoFilter

Abraço!

Olá Luciano!

Conseguiu resolver sua dúvida?