Estou tentando implementar um controle de usuario atraves de um filtro, porém não estou conseguindo, podem me dar uma força por gentileza.
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
String uri = req.getRequestURI();
String usuario = getUsuario(req);
if((usuario != null)||(req.getRequestURI().endsWith("/adm.jsp"))){
}else{
req.getRequestDispatcher("index.html").forward(request, response);
}
System.out.println("Usuario " + usuario + " acessando a URI " + uri);
/**eliminando o cache dos formularios*/
HttpServletResponse httpResponse = (HttpServletResponse)response;
httpResponse.setHeader("Cache-Control","no-cache, no-store, must-revalidate");
httpResponse.setHeader("Pragma","no-cache");
httpResponse.setDateHeader("Expires", 0);
request.setCharacterEncoding("UTF-8");
chain.doFilter(request, response);
}
private String getUsuario(HttpServletRequest req) {
Usuario usuario = (Usuario) req.getSession().getAttribute("usuarioLogado");
if(usuario==null)
return "<deslogado>";
return usuario.getUsuario();
}
Acredito que este seja o trecho com problema, no seu método getUsuario você sempre retorna um objeto, ou seja usuario sempre será diferente de null e o código responsável pelo forward nunca irá rodar.
Edit:
Eu não sei os detalhes do seu sistema e talvez o código abaixo acabe dando erro, mas em todo caso eu reescrevi o if e o método getUsuario para demonstrar um modo diferente
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
String uri = req.getRequestURI();
String usuario = getUsuario(req);
if(usuario.equalsIgnoreCase("<deslogado>"){
req.getRequestDispatcher("index.html").forward(request, response);
}
else {
System.out.println("Usuario " + usuario + " acessando a URI " + uri);
/**eliminando o cache dos formularios*/
HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.setHeader("Cache-Control","no-cache, no-store, must-revalidate");
httpResponse.setHeader("Pragma","no-cache");
httpResponse.setDateHeader("Expires", 0);
request.setCharacterEncoding("UTF-8");
chain.doFilter(request, response);
}
}
private String getUsuario(HttpServletRequest req) {
Objeto atributoUL = req.getSession().getAttribute("usuarioLogado");
//caso atributoUL seja null a expressão será false
//é boa prática fazer um teste via instanceof antes de realizar um cast
if (atributo instanceof Usuario) {
Usuario usuario = (Usuario) atributoUL;
return usuario.getUsuario();
//o codigo acima também pode ser feito desta forma:
//return ((Usuario) atributoUL).getUsuario();
}
else {
return "<deslogado>";
}
}