gismo
Junho 30, 2010, 1:43pm
#1
Esse filter fica redirecionando sem parar para a página login.html e não sei porque. Alguem pode ajudar?
O web.xml está assim:
<filter>
<filter-name>Filtro Seguranca</filter-name>
<filter-class>servlet.loginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Filtro Seguranca</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
E o filter
package servlet;
import java.io.IOException;
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;
public class loginFilter implements Filter {
public void init(FilterConfig config) throws ServletException {
}
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
HttpSession session = ((HttpServletRequest) req).getSession();
String usuario = (String) session.getAttribute("usuario");
if (usuario == null) {
((HttpServletResponse) res).sendRedirect("login.html");
} else {
chain.doFilter(req, res);
}
}
public void destroy() {
}
}
Obrigado.
Simples, porque seu Filter tem que verificar se URL requisitada não é justamente o “login.html”. Afinal não precisa estar autenticado para entrar nele, não concorda?
gismo
Junho 30, 2010, 8:00pm
#3
Verdade, consegui fazer e funcionou.
Porém agora pensei, e as páginas de erro? As páginas CSS, etc…
Também vou colocar no código para não considerar? Creio que deve ter uma maneira melhor certo?
Segue o código alterado abaixo…
package servlet;
import java.io.IOException;
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;
public class loginFilter implements Filter {
public void init(FilterConfig config) throws ServletException {
}
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
HttpSession session = ((HttpServletRequest) req).getSession();
String usuario = (String) session.getAttribute("usuarioLogado");
String paginaAtual = ((HttpServletRequest) req).getServletPath();
if ((usuario == null) && ((paginaAtual.indexOf("login.html") < 0))
&& ((paginaAtual.indexOf("checaUsuario.jsp") < 0))){
((HttpServletResponse) res).sendRedirect("login.html");
} else {
chain.doFilter(req, res);
}
}
public void destroy() {
}
}
Olha,
certo certo mesmo seria usar tecnologias como Spring ou um framework WEB que possua facilidade de implementar responsabilidades transversais, como o Struts2 e o VRaptor, por exemplo.
Mas, se for o caso de realmente usar Filter, há opções “elegantes” como, por exemplo, fazer com que toda requisição que termina com “.js”, “.css”, “.jpeg” e demais relacionadas a conteúdos estáticos também seja ignorada pela segurança. Ou você deixa isso direto no código fonte ou como parâmetro de aplicação no web.xml
gismo
Julho 1, 2010, 12:48pm
#5
VRaptor é um plugin de eclipse? E esse Struts2 também?
Onde eu posso achar mais detalhes?
Obrigado.