Como verificar se o Usuário logado tem permissão de Adm?

7 respostas
T

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

7 Respostas

C

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.

T
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.

C

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.

peczenyj

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?

C

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.

peczenyj

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.

T

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…

Criado 15 de setembro de 2016
Ultima resposta 16 de set. de 2016
Respostas 7
Participantes 3