IronM
Março 21, 2012, 5:37pm
#1
Olá amigos,
estou com um problema utilizando o primefaces que é o seguinte…
Possuo dois WebFilters, um para a autenticação e outro para o entityManager. Quando estes filters estão habilitados a página
de login é a primeira a ser executada e esta não carrega o estilo padrão do primefaces. Só dá certo quando eu desativo os filters…
peço ajuda de vcs por favor…
Muito Obrigado
Seu filter deve estar barrando as chamadas do primefaces para carregar os estilos.
No seu filtro, veja as urls que estão sendo chamdas. você deve estar a bloquea-las.
IronM
Março 21, 2012, 6:00pm
#3
nao tenho certeza… estes são os filtros:
Login
package br.com.umc.filtro;
import java.io.IOException;
import javax.faces.bean.SessionScoped;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* Servlet Filter implementation class LoginFilter
*/
@SessionScoped
public class LoginFilter implements Filter {
/**
* Default constructor.
*/
public LoginFilter() {
// TODO Auto-generated constructor stub
}
/**
* @see Filter#destroy()
*/
public void destroy() {
// TODO Auto-generated method stub
}
/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpSession session = req.getSession();
if (session.getAttribute("autenticado") != null
|| (req.getRequestURI().endsWith("login.xhtml"))) {
chain.doFilter(request, response);
} else {
HttpServletResponse res = (HttpServletResponse) response;
res.sendRedirect("login.xhtml");
}
}
/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
}
}
entityManager
package br.com.umc.filtro;
import java.io.IOException;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class JPAFiltro implements Filter {
private EntityManagerFactory factory;
@Override
public void destroy() {
factory.close();
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
EntityManager entityManager = this.factory.createEntityManager();
request.setAttribute("entityManager", entityManager);
System.out.println("Abrindo transação");
entityManager.getTransaction().begin();
chain.doFilter(request, response);
try {
System.out.println("commit");
entityManager.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
entityManager.getTransaction().rollback();
} finally {
entityManager.close();
}
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
this.factory = Persistence.createEntityManagerFactory("recrutamento");
}
}
Obrigado
Tudo bem, mas é vc que tem q ver isso. =P
coloque um system.out.println e veja todas as url q estão sendo solicitadas. E veja qual que você pode permitir para ir numa boa.
Deve ter chamada do próprio primefaces aí.
IronM
Março 22, 2012, 5:40am
#5
jakefrog, vc poderia me dizer como imprimir as url’s??
Obrigado
É como o nosso amigo jakefrog falou,o filtro de autenticação tá barrando o acesso ao recurso.
Eu uso assim no meu filtro :
public class LoginFilter implements Filter {
@Override
public void init(FilterConfig arg0) throws ServletException {}
@Override
public void destroy() {}
@Override
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
try{
HttpServletRequest httpReq = (HttpServletRequest)req;
HttpServletResponse httpRes = (HttpServletResponse)res;
HttpSession session = httpReq.getSession(true);
String url = httpReq.getRequestURL().toString();
if(session.getAttribute("usuario")==null && precisaAutenticar(url)){
httpRes.sendRedirect(httpReq.getContextPath()+"/login.jsf");
}else{
chain.doFilter(req, res);
}
}catch(Exception e){
e.printStackTrace();
}
}
boolean precisaAutenticar(String url){
return && !url.contains("login.jsf")
&& !url.endsWith(".css")
&& !url.endsWith(".js")
&& !url.endsWith(".jpg")
&& !url.endsWith(".gif");
}
}
Ei sei que você pega de dentro do request.
Não me lembro agora de cabeça, request.get alguma coisa.
Sei que um dos métodos é req.getRequestURL() mas tem outros. Futuca aí q vc acha.
Aí antes do if para barrar o login você pode mandar imprimir quem ta chamando oq, você vai ver que vão ter diversas chamadas.
IronM
Março 28, 2012, 4:09pm
#8
jakefrog realmente ele exibe varias chamadas a “css”, “js”, tal…
mas como fazer para nao barrar esses caras no primeiro acesso da página?
O método do raf4ever nao funcionou aki, dá um problema que o chrome diz q
“existem muitos redirecionamentos” e entao a pagina falha =/
alguma dica?
Muito Obrigado
No if que barra os request de pessoas não logadas, libere a chama aos css da vida. [=
Valeu a dica raf4ever funcionou certinho recuperando o css do primefaces.
Só tive que modificar ele um pouco.
private boolean precisaAutenticar(String url) {
return !url.contains("login.jsf") && !url.endsWith(".css") && !url.endsWith(".js") && !url.endsWith(".jpg")
&& !url.endsWith(".gif") && !url.contains("javax.faces.resource");
}