Estou começando a utilizar Filter na minha aplicação, pra ver se o usuario esta logado ou nao, etc. Peguei alguns exemplos na internet, dei uma pesquisada e fiz uma classe Filtro, implementando Filter e editei meu web.xml, o problema é que após editar meu web.xml, colocando o mapeamento do filtro simplesmente, a aplicação nao roda. O certo era aparecer no browser http://localhost:8084/Catalogo, só que se eu mexer no web.xml aparece http://localhost:8084/index.jsp e se eu tentar colocar Catalogo/, antes do index volta pra pagina de erro, alguem sabe por quê?
A unica coisa que alterei no meu web.xml foi isso:
packagecatalogo.controle.seguranca;importcatalogo.modelo.Usuario;importjava.io.IOException;importjavax.servlet.Filter;importjavax.servlet.FilterChain;importjavax.servlet.FilterConfig;importjavax.servlet.ServletException;importjavax.servlet.ServletRequest;importjavax.servlet.ServletResponse;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjavax.servlet.http.HttpSession;publicclassFiltroSegurancaimplementsFilter{publicvoidinit(FilterConfigconfig)throwsServletException{}publicvoiddoFilter(ServletRequestreq,ServletResponseres,FilterChainchain)throwsIOException,ServletException{HttpSessionsession=((HttpServletRequest)req).getSession();Usuariousuario=(Usuario)session.getAttribute("usuario");if(usuario==null){session.setAttribute("msg","Você não está logado no sistema!");((HttpServletResponse)res).sendRedirect("${pageContext.request.contextPath}/index.jsp");}else{chain.doFilter(req,res);}}publicvoiddestroy(){}}
Você já tentou voltar como estava!?
talvez quando você alterou retirou alguma coisa relacionada ao caminho!
tentou assim!
vlw
abs
M
markin1
vc já tentou colocar o filtro para alguma página específica ao invés de /* ? Pq assim você está declarando que o filtro tem que funcionar para todas as páginas, mas isso é um pouco incoerente, o usuário precisa ter acesso pelo menos à uma página de login.
Outra coisa que pode estar errado o seu sendRedirect, mas tenta uma coisa de cada vez
pdioniziofilho
seu filtro está “filtrando” (ohhhh) a sua requisição, como o usuário não está logado ele esta direcionando para ${pageContext.request.contextPath}/index.jsp .
Tenta substituir esse caminho por Catalogo/index.jsp
J
JeffersonJCosta
Mudei o meu web.xml para não utilizar o filtro em todos os arquivos, apenas em um diretório para testar, ficou assim:
packagecatalogo.controle.seguranca;importcatalogo.modelo.Usuario;importjava.io.IOException;importjavax.servlet.Filter;importjavax.servlet.FilterChain;importjavax.servlet.FilterConfig;importjavax.servlet.ServletException;importjavax.servlet.ServletRequest;importjavax.servlet.ServletResponse;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjavax.servlet.http.HttpSession;publicclassFiltroSegurancaimplementsFilter{publicvoidinit(FilterConfigconfig)throwsServletException{}publicvoiddoFilter(ServletRequestreq,ServletResponseres,FilterChainchain)throwsIOException,ServletException{HttpSessionsession=((HttpServletRequest)req).getSession();Usuariousuario=(Usuario)session.getAttribute("usuario");if(usuario==null){session.setAttribute("msg","Você não está logado no sistema!");((HttpServletResponse)res).sendRedirect("Catalogo/index.jsp");}else{chain.doFilter(req,res);}}publicvoiddestroy(){}}
Com essa alteração eu consigo rodar minha aplicação sem problemas e acesso a pagina de login, o problema agora é que seu eu acessar alguma pagina sem estar logado não aparece a mensagem que defini no meu doFilter, aparece que o IE nao pode exibir a página, porque sera?
J
JeffersonJCosta
Pessoal,
Alterei o meu Filter, seguindo um tutorial, mas o web.xml não alterei e agora voltou a não rodar minha aplicação, diz que não conseguiu implementar o modulo.
Nao entendi.
pdioniziofilho
posta suas alterações e o codigo do index
J
JeffersonJCosta
Meu novo Filter ficou assim:
packagecatalogo.controle.seguranca;importcatalogo.modelo.Usuario;importjava.io.FileInputStream;importjava.io.IOException;importjava.util.Enumeration;importjava.util.HashMap;importjava.util.Properties;importjavax.servlet.Filter;importjavax.servlet.FilterChain;importjavax.servlet.FilterConfig;importjavax.servlet.ServletException;importjavax.servlet.ServletRequest;importjavax.servlet.ServletResponse;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;publicclassFiltroSegurancaimplementsFilter{publicvoidinit(FilterConfigconfig)throwsServletException{try{StringaccessFile=this.getClass().getClassLoader().getResource("access.properties").getPath();Propertiesproperties=newProperties();properties.load(newFileInputStream(accessFile));HashMapresources=null;resources.putAll(properties);}catch(Exceptione){e.printStackTrace();thrownewServletException(e);}}publicvoiddoFilter(ServletRequestreq,ServletResponseres,FilterChainchain)throwsIOException,ServletException{/* HttpSession sessao = ( (HttpServletRequest) req ).getSession(); Usuario usuario = (Usuario) sessao.getAttribute("usuario"); if( usuario == null ) { sessao.setAttribute("msg", "Você não está logado no sistema!"); ( (HttpServletResponse) res ).sendRedirect("index.jsp"); } else { chain.doFilter(req, res); }*/booleanallowed=verifyAccess((HttpServletRequest)req);if(!allowed){Stringlogon="logon.jsp?next="+getNextURL((HttpServletRequest)req);((HttpServletResponse)res).sendRedirect(logon);}chain.doFilter(req,res);}protectedbooleanverifyAccess(HttpServletRequestrequest){Stringresource=request.getRequestURI().replaceAll(request.getContextPath(),"");while(resource.length()>0){HashMapresources=null;Stringrules=(String)resources.get(resource);if(rules!=null){Usuariouser=(Usuario)request.getSession().getAttribute("USUARIO");return(user!=null&&user.hasRules(rules));}elseif(!resource.equals("/")){intindex=resource.lastIndexOf("/");if(index>-1){resource=resource.substring(0,index);}}else{resource="";}}returntrue;}protectedStringgetNextURL(HttpServletRequestrequest){Stringurl=request.getRequestURI();StringBufferparams=newStringBuffer("");EnumerationenumParams=request.getParameterNames();while(enumParams.hasMoreElements()){Stringname=(String)enumParams.nextElement();Stringvalue=request.getParameter(name);if(params.length()>0){params.append("&");}params.append(name).append("=").append(value);}returnurl+"?"+params.toString();}publicvoiddestroy(){}}
<%@pagelanguage="java"contentType="text/html; charset=ISO-8859-1"pageEncoding="ISO-8859-1"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><metahttp-equiv="Content-Type"content="text/html; charset=ISO-8859-1"><title>Login</title></head><body><formaction="login.do"method="post"><table><tr><thcolspan="2">Login</th></tr><tr><td>Login: </td><td><inputclass="campo"type="text"name="login"/></td></tr><tr><td>Senha: </td><td><inputclass="campo"type="password"name="senha"/></td></tr><tr><tdcolspan="2"align="center"><inputtype="submit"value="Entrar"/></td></tr></table></form></body></html>
J
JeffersonJCosta
Nao sei se uso meu filtro como esta agora, no post acima, ou como estava antes, com o codigo comentado dentro do doFilter. Como disse usando o doFilter como estava (comentado) a aplicação roda, mas quando eu tento acessar o diretorio que esta com filtro mostra q o IE nao consegue exibir a pagina e se eu usar o filtro novo(post acima) nem roda a aplicação.
J
JeffersonJCosta
Dos dois jeitos está dando erro. Nao roda mais a minha aplicação.
C:\Documents and Settings\TI\Desktop\Catalogo\Novo Catalogo\05-04\Catalogo\nbproject\build-impl.xml:611: O módulo não foi implementado.
06/04/2010 09:49:26 org.apache.catalina.core.StandardContext start
SEVERE: Error filterStart
06/04/2010 09:49:26 org.apache.catalina.core.StandardContext start
SEVERE: Context [/Catalogo] startup failed due to previous errors