Peguei o teu código e alterei com as minhas necessidades e alterei tambem o meu web.xml, mas não esta funcionando, se eu tento acessar algum arquivo que não esta na miha lista de permissoes(web.xml) nao sou redirecionado para a pagina de login.
web.xml
<filter>
<filter-name>FiltroControleAcesso</filter-name>
<filter-class>catalogo.controle.seguranca.FiltroControleAcesso</filter-class>
<init-param>
<description>URLs a serem ignoradas pelo Controle de Acesso</description>
<param-name>enderecosLivres</param-name>
<param-value>/css;/imagens/;/uteis;/login.jsp</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>FiltroControleAcesso</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Filtro:
[code]package catalogo.controle.seguranca;
import catalogo.modelo.Usuario;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
public class FiltroControleAcesso implements Filter {
private FilterConfig filterConfig = null;
private String[] enderecosLivres = null;
//private ControleAcesso controle = null;
@Override
public void init(FilterConfig filterConfig) {
try
{
this.filterConfig = filterConfig;
this.enderecosLivres = filterConfig.getInitParameter("enderecosLivres").split(";");
//InitialContext ictx = new InitialContext();
//controle = (ControleAcesso) ictx.lookup("corporativo/ControleAcessoBean");
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
@Override
public void doFilter(ServletRequest request,
ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
boolean autorizado = false;
HttpServletRequest hrequest = (HttpServletRequest) request;
//processa as URIs que estão na lista de exceções.
String URI = hrequest.getRequestURI();
String ctx = hrequest.getContextPath();
for (int i = 0; i < enderecosLivres.length; i++)
{
if (URI.startsWith(ctx + enderecosLivres[i] + "/")
|| URI.equals(ctx + "/")
|| URI.startsWith(ctx + "/"))
{
autorizado = true;
break;
}
}
HttpSession session = hrequest.getSession(true);
Usuario user = null;
//String pwd = null;
if (!autorizado) //não está na lista de exceções
{
user = (Usuario) session.getAttribute("usuario");
//pwd = (String) session.getAttribute("corporativo_pwd");
/*if (!Validador.vazio(usr)) {
autorizado = controle.autorizar(usr, pwd, URI);
}*/
}
if (autorizado) //autorizado
{
chain.doFilter(request, response);
}
else if (!autorizado && user != null) //não autorizado
{
RequestDispatcher rd = hrequest.getRequestDispatcher("/acessoNEgado.do");
rd.forward(request, response);
}
else //não logado
{
session.setAttribute("msg", "login");
session.setAttribute("URI", URI);
RequestDispatcher rd = hrequest.getRequestDispatcher("/logar.do");
rd.forward(request, response);
}
}
public FilterConfig getFilterConfig() {
return (this.filterConfig);
}
public void setFilterConfig(FilterConfig filterConfig) {
this.filterConfig = filterConfig;
}
@Override
public String toString() {
if (filterConfig == null) {
return ("FiltroControleAcesso()");
}
StringBuffer sb = new StringBuffer("FiltroControleAcesso(");
sb.append(filterConfig);
sb.append(")");
return (sb.toString());
}
@Override
public void destroy() {
}
}
[/code]
Fiquei com algumas dúvidas no for dentro do doFilter, que percorre a lsita de endereços livres, acho que posso ter errado ali