Boa tarde pessoal,
Estou aprendendo java web agora, e preciso verificar se o usuário tem perfil adm, caso tenha, a pagina será direcionada para uma pagina diferente da de um usuário comum. Estou utilizando JSP.
As consultas deverão ser no Banco de Dados, tanto para o login e senha quanto para o perfil. Jé tenho a parte do Login e senha prontos, falta verificar se é adm ou não.
Desde já, Obrigado!
Tiago Igreja
Como verificar se o Usuário logado tem permissão de Adm?
7 Respostas
Tiago, quais campos voce tem na sua tabela?
usuario, senha, …?
Você pode criar um campo, por exemplo “nível”, e ao fazer a consulta para verificar o acesso, verifica também o nivel de acesso.
Se for X, direciona para …
se for Y, direciona para …
Qualquer coisa, posta uma parte do seu código aqui.
Boa noite Carlos, tenho o campo login, senha e o campo perfil.
abaixo como faço o login:
/* UsuarioDAO*/
public static boolean verificarUsuario(String login, String senha) throws ClassNotFoundException {
Connection conexao = null;
Statement comando = null;
PreparedStatement comando1 = null;
Usuario usuario = null;
boolean resultado = false;
try {
conexao = BD.getConexao();
String sql = "select * from usuario where login = ? and senha = ?";
comando1 = conexao.prepareStatement(sql);
comando1.setString(1, login);
comando1.setString(2, senha);
ResultSet rs = comando1.executeQuery();
rs.last();
if (rs.getRow() != 0) {
resultado = true;
}
} catch (SQLException ex) {
ex.printStackTrace();
} finally {
fecharConexao(conexao, comando);
}
return resultado;
}
/<em>Login Controller</em>/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
RequestDispatcher view = null;
try {
String login = request.getParameter(“usuario”);
String senha = request.getParameter(“senha”);
if (UsuarioDAO.verificarUsuario(login, criptografar(senha))) {
view = request.getRequestDispatcher("/index.jsp");
} else {
view = request.getRequestDispatcher("/login.jsp");
}
view.forward(request, response);
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
}
}
Obrigado.
Bom dia Tiago, entendi.
Vou postar um código que eu utilizo para isto, veja se te ajuda:
Meu DAO:
public CUsuario getUsuario(String usuario, String senha){
String sql = “SELECT * FROM usuario WHERE email = ? AND senha = ?”;
try{
conn = ConexaoMySQL.getConexao();
pst = conn.prepareStatement(sql);
pst.setString(1, usuario);
pst.setString(2, senha);
rs = pst.executeQuery();
if(rs.next()){
CUsuario cc2 = new CUsuario();
cc2.setCodigo(rs.getInt(“codigo”));
cc2.setCodigoEmpresa(rs.getInt(“codigo_empresa”));
cc2.setNome(rs.getString(“nome”));
cc2.setEmail(rs.getString(“email”));
cc2.setPermissao(rs.getInt(“permissao”));
return cc2;
}
}catch(SQLException | ClassNotFoundException | IOException e){
System.out.println(e);
}
finally{
ConexaoMySQL.fechaConexao(conn, pst, rs);
}
return null;
}
E aqui o meu controller:
String email = request.getParameter(“email”);
String senha = request.getParameter(“senha”);
CUsuario user = new DaoUsuario().getUsuario(email, senha);
if(user != null){
if(user.getPermissao == 1){
//direciona para a página que vc quer
}else if(user.getPermissao == 2){
//direciona para outra página
}else{
//outra página
}
}
Veja se você entendeu.
o que geralmente se faz: cria-se um filtro e verifica se o usuario tem a permissão de acessar o recurso X ( ou de efetuar a operação ) a cada request.
existem principios de segurançã como ‘minima autoridade’ onde vc só permite o minimo para cada usuario ( ou classe de usuario ) e verifica insanamente se pode ou não fazer OU alguem vai descobrir e forçar a barra.
um bom exemplo é: vc lista x coisas pro usuario u porem vc filtra sob algum criterio ( o usuario u é do grupo TAL e não pode ver as coisas de outros grupos ). se ele pode deletar uma coisa, é bom vc verificar se ele PODE fazer isso na coisa do grupo tal, etc. afinal ele pode forjar um request e apagar o que não deve (ou a interface pode ter um problema).
devo dizer que se vc guarda senha em plain text vc merece todo o meu desprezo?
peczenyj, eu guardo minhas senhas sim em uma String, porém, ela fica criptografada. Não sei como o rapaz que pediu ajuda faz, mas enfim.
O código que postei, é para ele entender a lógica, de como fazer, pois acredito que era essa a dúvida dele.
O fórum é justamente para esta finalidade, TIRAR DÚVIDAS. No meu caso(pode ser o caso dele também), não tive e não tenho condições(financeiras) para buscar uma especialização na área de programação, e por isso sempre recorremos aos fóruns. E no caso dele(como ele mencionou), está INICIANDO nesta área.
Portanto, mais RESPEITO(com quem está tentando ajudar), mais AJUDA(com quem está aprendendo), e menos hipocrisia.
eu fui ironico com relação a senha em plain text. é normal em quem esta começando armazenar isso afinal a senha é um atributo.
eu peguei a sua resposta e completei com meus pontos de vista, portanto é uma soma de informações e quem tiver as mesmas duvidas vai aprender com as nossas colaborações.
perceba q vc mostrou um DAO e eu falei em Filter. são soluções que se somam. eu não ganho nada vindo aqui responder, também não ganho nada em faltar com o respeito. se vc se doeu, não foi minha intenção.
Obrigado, vou tentar aki.
A senha ta sendo criptografada antes de ir para o banco. Não sei se é da forma correta, mas ta sendo.
Obrigado novamente…