Boa noite galera, estou com uma grande duvida, sou iniciante no uso de jsf, tenho uma aplicação em que estou rodando facelets + richfaces 3.2 , a duvida é o seguinte:eu precisava incluir nas paginas xhtml alguma maneira de verificar se o usuario está autenticado, e se tem acesso para acessar aquela página, no jsp eu faria algo como<%Usuariouser=(Usuario)request.getSession.getParameter(“user”)aidepoisdeterousuarioqueestalogadonasessaoeuverificariaseeletemdireitodeacessoapagina,senaojadispachoeleparateladeloginoudeeventualerro…%>já em uma página .xhtml eu nao consigo criar o <%%> , como eu posso fazer essa verificação em uma pagina .xhtml ?
Eu até cheguei a utilizar o JAAS, mas no projeto estamos querendo desacoplar a camada web da persistencia em servidores diferentes, intao ja fugiria do nosso escopo essa solução, tem algum jeito de usar JAAS sem acessar diretamente ao banco, utilizando por exemplo um EJB?
Você conhece alguma documentação com exemplo de implementação de um Filter de acesso??
Muito Obrigado!
ericogr
No projeto que estou trabalhando (jsf+facelets+spring+jpa), utilizamos o acegi http://www.acegisecurity.org/
Com ele vc tem muuuitas opções e maneiras de controlar a autenticação e acesso de usuários.
Acho que vale a pena dar uma olhada, principalmente se vc estiver usando Spring.
abs
C
ccalixto
No meu caso eu uso um Filter e faço essa verificação antes de abrir a página JSF, dentro do próprio filter.
O Legal é que qualquer mudança na lógica de permissões, não implica em alterações no código.
L
lgweb
Como funciona este filter amigos alguem pode dar um exemplo aew por gentileza .
C
ccalixto
Exemplo de Filter para login:
importjava.io.IOException;importjavax.servlet.Filter;importjavax.servlet.FilterChain;importjavax.servlet.FilterConfig;importjavax.servlet.RequestDispatcher;importjavax.servlet.ServletException;importjavax.servlet.ServletRequest;importjavax.servlet.ServletResponse;importjavax.servlet.http.HttpServletRequest;publicclassLoginRedirectFilterimplementsFilter{publicvoiddestroy(){}publicvoiddoFilter(ServletRequestreq,ServletResponseres,FilterChainchain)throwsServletException,IOException{HttpServletRequestrequest=(HttpServletRequest)req;//HttpServletResponse response = (HttpServletResponse)res;Stringuri=request.getRequestURI();if(uri.indexOf("/sistemaweb")<0){chain.doFilter(req,res);}else{ObjectloginBean=request.getSession().getAttribute("loginBean");if((loginBean!=null)&&(loginBeaninstanceofLoginBean)&&(((LoginBean)loginBean).getUsuario().getId()!=null)){if(uri.indexOf("login.faces")>=0){RequestDispatcherrd=request.getRequestDispatcher("/sistemaweb/home.faces");rd.forward(req,res);}else{//aqui pode-se fazer as valições de permissão de acesso//String uri = request.getRequestURI();chain.doFilter(req,res);}}else{RequestDispatcherrd=request.getRequestDispatcher("login.faces");rd.forward(req,res);}}}publicvoidinit(FilterConfigarg0)throwsServletException{}}
importjava.io.IOException;importjavax.servlet.Filter;importjavax.servlet.FilterChain;importjavax.servlet.FilterConfig;importjavax.servlet.RequestDispatcher;importjavax.servlet.ServletException;importjavax.servlet.ServletRequest;importjavax.servlet.ServletResponse;importjavax.servlet.http.HttpServletRequest;publicclassLoginRedirectFilterimplementsFilter{publicvoiddestroy(){}publicvoiddoFilter(ServletRequestreq,ServletResponseres,FilterChainchain)throwsServletException,IOException{HttpServletRequestrequest=(HttpServletRequest)req;//HttpServletResponse response = (HttpServletResponse)res;Stringuri=request.getRequestURI();if(uri.indexOf("/sistemaweb")<0){chain.doFilter(req,res);}else{ObjectloginBean=request.getSession().getAttribute("loginBean");if((loginBean!=null)&&(loginBeaninstanceofLoginBean)&&(((LoginBean)loginBean).getUsuario().getId()!=null)){if(uri.indexOf("login.faces")>=0){RequestDispatcherrd=request.getRequestDispatcher("/sistemaweb/home.faces");rd.forward(req,res);}else{//aqui pode-se fazer as valições de permissão de acesso//String uri = request.getRequestURI();chain.doFilter(req,res);}}else{RequestDispatcherrd=request.getRequestDispatcher("login.faces");rd.forward(req,res);}}}publicvoidinit(FilterConfigarg0)throwsServletException{}}
Vou testar essa implementação, muitissimo obrigado…
Abraço
L
luanibarra
Estou tendo um erro quando digito o usuario e senha para autenticar…
se eu digito na mao o endereco http://localhost:8080/Cockpit/pages/home.jsf depois de autenticado rola normal…agora o redirecionamento automatico nao rola…
packagebr.com.sametrade.cockpit.handler;importjava.io.IOException;importjavax.servlet.Filter;importjavax.servlet.FilterChain;importjavax.servlet.FilterConfig;importjavax.servlet.RequestDispatcher;importjavax.servlet.ServletException;importjavax.servlet.ServletRequest;importjavax.servlet.ServletResponse;importjavax.servlet.http.HttpServletRequest;publicclassLoginRedirectFilterimplementsFilter{publicvoiddestroy(){}publicvoiddoFilter(ServletRequestreq,ServletResponseres,FilterChainchain)throwsServletException,IOException{HttpServletRequestrequest=(HttpServletRequest)req;// HttpServletResponse response = (HttpServletResponse)res;Stringuri=request.getRequestURI();if(uri.indexOf("/CockPit")<0){chain.doFilter(req,res);}else{ObjectloginBean=request.getSession().getAttribute("loginHandler");if((loginBean!=null)&&(loginBeaninstanceofLoginHandler)&&(((LoginHandler)loginBean).getCodigo()!=null)){if(uri.indexOf("login.jsf")>=0){RequestDispatcherrd=request.getRequestDispatcher("/CockPit/pages/home.jsf");rd.forward(req,res);}else{// aqui pode-se fazer as valições de permissão de acesso// String uri = request.getRequestURI();chain.doFilter(req,res);}}else{RequestDispatcherrd=request.getRequestDispatcher("login.jsf");rd.forward(req,res);}}}publicvoidinit(FilterConfigarg0)throwsServletException{}}
seguinte ta dando um problema qdo eu tento acessar as otras paginas que sao chamadas do menu,
as paginas simplesmente aparecem em branco e fica esta url
packagecom.Lgweb.Tcc.Util;importcom.Lgweb.Tcc.Model.Usuario;importjava.io.IOException;importjavax.servlet.Filter;importjavax.servlet.FilterChain;importjavax.servlet.FilterConfig;importjavax.servlet.RequestDispatcher;importjavax.servlet.ServletException;importjavax.servlet.ServletRequest;importjavax.servlet.ServletResponse;importjavax.servlet.http.HttpServletRequest;publicclassSecuritFilterimplementsFilter{publicvoiddestroy(){}publicvoiddoFilter(ServletRequestreq,ServletResponseres,FilterChainchain)throwsServletException,IOException{HttpServletRequestrequest=(HttpServletRequest)req;//HttpServletResponse response = (HttpServletResponse)res; Stringuri=request.getRequestURI();if(uri.indexOf("/view")<0){chain.doFilter(req,res);}else{ObjectloginBean=request.getSession().getAttribute("usuario");if((loginBean!=null)&&(loginBeaninstanceofUsuario)&&(((Usuario)loginBean).getUsuarioid()!=null)){if(uri.indexOf("/view/login/login.jsf")>=0){RequestDispatcherrd=request.getRequestDispatcher("/view/MenuSistema.jsf");rd.forward(req,res);}else{//aqui pode-se fazer as valições de permissão de acesso //String uri = request.getRequestURI(); chain.doFilter(req,res);}}else{RequestDispatcherrd=request.getRequestDispatcher("/view/login/login.jsf");rd.forward(req,res);}}}publicvoidinit(FilterConfigarg0)throwsServletException{}}
tds as paginas estao dentro da pasta view,cada uma em suas subpastas tipo/view/pedido, /view/cliente …