Olá pessoal, to com o seguinte probleminha, preciso pegar as paginas no meu filtro sejam elas direcionadas por:
" sendRedirect "
response.sendRedirect("/pagina1.jsp");
ou por um " RequestDispatcher "
request.getRequestDispatcher("/pagina2.jsp").forward(request, response);
Como posso fazer isso?
Grato a todos!
[]'s
Como assim pegar?
vc quer dizer restringir o acesso a essa pagina?
Bom, se for isso eu acho que é mais ou menos assim:
Seu Filtro
[code]
Usuario usuario = (Usuario) session.getAttribute("usuario");
if (usuario == null) {
((HttpServletResponse) res).sendRedirect("/pagina1.jsp");
} else {
chain.doFilter(req, res);
}[/code]
web-info/web.xml
<filter>
<filter-name>SeuFiltro</filter-name>
<filter-class>seuPacote.SeuFiltro</filter-class>
</filter>
<filter-mapping>
<filter-name>SeuFiltro</filter-name>
<url-pattern>paginaRestrita.jsp</url-pattern>
</filter-mapping>
referencia:http://www.web4u.eti.br/2008/07/12/servlet-filter/
Só pra reforçar,
caso vc deseje restringir a um diretorio com varias paginas
<filter-mapping>
<filter-name>SeuFiltro</filter-name>
<url-pattern>/pastaDasPaginas/*</url-pattern>
</filter-mapping>
Não é isso minha duvida, pois quanto ao filtro e a implementação é tranquilo, acontece que por padrão o filtro pega tudo que for REQUEST, no caso td que for encaminhado por response.sendRedirect() ele pega, mas eu quero pegar tambem o que for enviado por “request.getRequestDispatcher(”/pagina2.jsp").forward(request, response);" sendo que se eu declarar no filtro a opção:
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
ele da erro logo que inicia a aplicação.
A opção REQUEST é a default e se eu declarar a FORWARD ele so pega as requisições feitas por “request.getRequestDispatcher”.
Espero ter sido mais claro desta vez, obrigado amigo.
[]'s
Olha…Creio que para atender a sua necessidade você poderia declarar FORWARD e REQUEST juntos…
<filter-mapping>
<filter-name>filtro1</filter-mapping>
<servlet-name>pagina1</servlet-name>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
<filter-mapping>
<filter-name>filtro2</filter-mapping>
<servlet-name>pagina2</servlet-name>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
Poste o erro que deu na hora de subir sua aplicação…
Se eu não declarar o (na verdade assumindo que o default é REQUEST) eu consigo pegar a ação que foi invocada no servlet, mas não a pagina que originou essa ação e é justamente isso o q eu quero pegar!
Não to no serviço agora, mas depois posto o código de erro.
[]'s
O erro que esta dando:
javax.servlet.ServletException: Filter execution threw an exception
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:259)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:630)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
at br.com.seguranca.controle.FiltroRequisicao.doFilter(FiltroRequisicao.java:38)
...
parece que fica em loop e da estouro de memoria.
meu mapeamento:
<filter>
<display-name>FiltroRequisicao</display-name>
<filter-name>FiltroRequisicao</filter-name>
<filter-class>br.com.seguranca.controle.FiltroRequisicao</filter-class>
</filter>
<filter-mapping>
<filter-name>FiltroRequisicao</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
Estive lendo e existe a possibilidade de pegar o retorno do filtro (após a chamada a chain.doFilter) e então tratar a resposta, pra mim isto seria perfeito, mas quando pego um parametro que coloquei na requisição no servlet ele vem nulo após a execução do chain.doFilter(), li que devo criar uma classe wrapper para conseguir fazer este tratamento, mas não ficou muito claro pra mim qual metodo preciso dar override para então tratar a resposta.
[]'s