Boa tarde, pessoal, quero saber como fazer uma autenticação para acesso em apenas algumas páginas:
Tenho as páginas, as quais quero que sejam disponibilizadas apenas quando o usuário logar.
empresa.xhtml;
formEmpesa.xhtml;
login.xhtml
lista.xhtml
mas as páginas quero que sejam disponibilizadas sem autenticação.
index.xhtml;
resultpesq.xhtml;
contato.xhtml e
contrato.xhtml
abaixo tentei criar sem sucesso um filtro e um managed bean para tal, porém o que às vezes acontece é não ter um redirecionamento correto ou simplesmente tudo estar disponível sem autenticação têm idéia de como ajudar? agradeço desde já, abaixo disponibilizo o que tentei (sem sucesso fazer até agora)…
Gostaria também, se possível de tentar fazer através de uma consulta em uma tabela específica a existência de um usuário/senha.
Muito obrigado.
Managed Bean
package managedbeans;
import java.util.HashMap;
import java.util.Map;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;
@ManagedBean
public class AutenticationBean {
private static Map<String, String> mapa = new HashMap<String, String>();
private String usuario;
private String senha;
static {
AutenticationBean.mapa.put("smnj", "753159");
}
public String autentica() {
FacesContext fc = FacesContext.getCurrentInstance();
if (AutenticationBean.mapa.containsKey(this.usuario)
&& AutenticationBean.mapa.get(this.usuario).equals(this.senha)) {
ExternalContext ec = fc.getExternalContext();
HttpSession session = (HttpSession) ec.getSession(false);
session.setAttribute("usuario", this.usuario);
System.out.println("----------------------------");
System.out.println(usuario);
System.out.println(senha);
System.out.println("----------------------------");
return "index";
} else {
FacesMessage fm = new FacesMessage("Uuário e/ou senha inválidos");
fm.setSeverity(FacesMessage.SEVERITY_ERROR);
fc.addMessage(null, fm);
return "login";
}
}
public static Map<String, String> getMapa() {
return mapa;
}
public static void setMapa(Map<String, String> mapa) {
AutenticationBean.mapa = mapa;
}
public String getUsuario() {
return usuario;
}
public void setUsuario(String usuario) {
this.usuario = usuario;
}
public String getSenha() {
return senha;
}
public void setSenha(String senha) {
this.senha = senha;
}
public String registraSaida() {
FacesContext fc = FacesContext.getCurrentInstance();
ExternalContext ec = fc.getExternalContext();
HttpSession session = (HttpSession) ec.getSession(false);
session.removeAttribute("usuario");
return "login";
}
}
Filtro
package filters;
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.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebFilter(servletNames = { "Faces Servlet" })
public class ControleDeAcesso implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpSession session = req.getSession();
if (session.getAttribute("usuario") != null
|| req.getRequestURI().endsWith(
"/LuzianiaOnline/pages/login.xhtml")) {
chain.doFilter(request, response);
} else {
HttpServletResponse res = (HttpServletResponse) response;
res.sendRedirect("/LuzianiaOnline/pages/login.xhtml");
}
}
@Override
public void init(FilterConfig fConfig) throws ServletException {
}
@Override
public void destroy() {
}
}