... imports...
/**
* Classe que será utilizada como filtro para verificar as páginas que o usuário não pode acessar
*/
public class FiltroSeg implements Filter {
private static final Logger logger = Logger.getLogger(com.teste.seguranca.FiltroSeg.class);
private ServletContext servletContext;
public void init(FilterConfig config) throws ServletException {
servletContext = config.getServletContext();
}
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException{
boolean voltaLogin = false;
//Obter o objeto HttpServletRequest do Request do Filtro
HttpServletRequest hreq = (HttpServletRequest) req;
HttpServletResponse resp = (HttpServletResponse) res;
String pagina = hreq.getPathInfo();
//remover a '/' inicinal
pagina = pagina.substring(pagina.indexOf("/") + 1, pagina.length());
UsuarioSeg usu = UsuarioSessao.getUsuario(req, res, servletContext);
if (usu != null) {
//verificar se o usuário tem acesso à página
if (pagina != null) {
if (!pagina.toLowerCase().trim().equals(usu.buscaPagina(pagina).toLowerCase().trim())) {
voltaLogin = true;
}
}
}
else {
voltaLogin = true;
}
//verificar se deve redirecionar para a página de login,
//desde que não tenha solicitado as páginas: index.jsp e usu_login.jsp
if (voltaLogin == true && (!pagina.equals("index.jsp") && !pagina.equals("usu_login.jsp"))) {
resp.sendRedirect("usu_login.jsp");
}
else {
chain.doFilter(req, res);
}
}
public void destroy(){
}
}
Se alguem tiver outra idéia de controle de acesso em JSF agradeço caso queira dar uma dica de como pode ser feito.
Obrigado.