Fala pessoal, tudo bom?
Estou com uma dúvida tremenda, e não sei mais o que eu faço. Li muitas coisas, pesquisei mutias coisas, mas nada entra na minha cabeça.
Estou desenvolvendo uma Projeto em Web através de JSF. Minha página de login funciona da seguinte maneira:
- Se o usuário for Administrador ele vai para uma página de Administrador;
- Se o usuário for usuário comum, ele vai pra uma página comum;
- Se o usuário errar a senha/login ele volta pra mesma página de login.
Meu banco de dados funciona da seguinte maneira:
- usuario - senha - nível.
Sendo NIVEL 1 e 2.
1: Administrador.
2: Usuário comum.
Quando eu uso FacesContext pra resgatar o usuário, funciona perfeitamente minha lógina, porém, estou utilizando servlet pra fazer comunicação com o Android. Se eu tirar o “FacesContext”, o Android funciona perfeitamente, mas deixa de funcionar o Web. Tentei mudar de várias formas, mas não consegui.
Segue os códigos:
Usuario.java:
[code] private String usuario;
private String senha;
private int tipo;
/**
* Getters e Setters
*/
public void setSenha(String senha) {
this.senha = senha;
}
public void setUsuario(String usuario) {
this.usuario = usuario;
}
public String getSenha() {
return senha;
}
public String getUsuario() {
return usuario;
}
public void setTipo(int tipo){
this.tipo = tipo;
}
public int getTipo(){
return tipo;
}
}[/code]
Meu MB:
[code]public String entrar() {
LoginDAO dao = new LoginDAO();
String outcome = “LOGIN_NOK”; // Login falhou. (NOK -> Não ok)
if (dao.Validar(user) != null) {
//Usuario userSession = (Usuario) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("usuario");
Usuario us = new Usuario();
if(us.getTipo() == 1){
outcome = "LOGIN_ADMIN";
} else if(us.getTipo() == 2){
outcome = "LOGIN_USER";
} else {
outcome = "LOGIN_NOK";
}
}
return outcome;
}[/code]
E por fim, meu DAO do Login:
[code] public Usuario Validar(Usuario user) {
// boolean resultadoLogin = false;
try {
Conecta conectar = new Conecta();
conectar.Conexao();
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/agendamento",
"root", "rafael");
String query = "select * from users where usuario=? and senha=?";
PreparedStatement preparedStatement = conn.prepareStatement(query);
/**
* Abaixo é definido qual informação eu devo passar em minha query.
*/
preparedStatement.setString(1, user.getUsuario());
preparedStatement.setString(2, user.getSenha());
/**
* Vou executar minha sentença salva na variável preparedStatement.
*
*/
ResultSet resultado = preparedStatement.executeQuery();
if (resultado.next()) {
user = new Usuario();
user.setUsuario(resultado.getString("usuario"));
user.setSenha(resultado.getString("senha"));
user.setTipo(resultado.getInt("nivel"));
//FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("usuario", user);
return user;
}
} catch (SQLException e) {
System.err.println("Erro de conexao:" + e);
} finally {
}
return null;
}
}
[/code]
LoginServlet.java
[code]/*
- To change this template, choose Tools | Templates
- and open the template in the editor.
*/
package br.com.einstein.limeira.agendamento.servlets;
import br.com.einstein.limeira.agendamento.db.LoginDAO;
import br.com.einstein.limeira.agendamento.models.Usuario;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
- Servlet usado para processar requisições de login solicitadas por aplicativo
- externo.
-
@author pedrobrigatto
*/
public class LoginServlet extends HttpServlet {
/**
- Processes requests for both HTTP
-
GET
and -
POST
methods. - @param request servlet request
- @param response servlet response
- @throws ServletException if a servlet-specific error occurs
-
@throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
/**
- Handles the HTTP
-
POST
method. - @param request servlet request
- @param response servlet response
- @throws ServletException if a servlet-specific error occurs
-
@throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String usuario = request.getParameter("usuario");
String senha = request.getParameter("senha");
Usuario user = new Usuario();
user.setUsuario(usuario);
user.setSenha(senha);
LoginDAO dao = new LoginDAO();
String resposta = "FALHA";
if (dao.Validar(user) != null) {
resposta = "SUCESSO";
}
response.setContentType("text/plain");
response.setCharacterEncoding("utf-8");
response.getWriter().print(resposta);
}
/**
- Returns a short description of the servlet.
-
@return a String containing servlet description
*/
@Override
public String getServletInfo() {
return “Short description”;
}
}
[/code]
Reparem que o código, está “comentado” meus FacesContext, justamente porque o Login do Android funciona apenas desse jeito. Mas o Web não.
Pra conseguir com que o Web funcione a parte do Login, eu preciso mudar meu método “Validar” para boolean, e adicionar os FacesContext que estão comentado (tanto no MB quanto no DAO), ai eu consigo fazer o procedimento. Eu sei que o Android não irá reconhecer FacesContext, que é um dos motivos de não estar funcionando, mas eu não sei outra maneira de poder fazer com QUE OS DOIS FUNCIONEM!
Lembrando, que o Android não tem essa validação de que se for admin vai pra X página, se for usuário vai pra Y página. APENAS O WEB precisa ter essa validação perfeita (conforme está descbrito no Managed Bean).
Quem puder me ajudar, ficarei agradecido, porque não sei a quem mais recorrer.
Espero ter sido claro em minha explicação.
Obrigado, e abraços.