Querendo entender o JAAS

4 respostas
jaissonduarte

Estou quase conseguindo entender o JAAS estou a 3 dias direto e quase consigo entender mas
minha duvida é nesse trecho do código que esta no artigo http://www.guj.com.br/articles/184:

private void validaUsuario(Connection conn) throws LoginException {
        String senhaBanco = null;
        PreparedStatement statement = null;
        ResultSet rs = null;
        try {
            statement = conn.prepareStatement(sqlUser);
            statement.setString(1, loginInformado);
            rs = statement.executeQuery();
            if (rs.next()) {
                senhaBanco = rs.getString(1);
            } else {
                succeeded = false;
                throw new LoginException("Usuário não localizado.");
            }
        } catch (SQLException e) {
            succeeded = false;
            throw new LoginException("Erro ao abrir sessão: "
                    + e.getClass().getName() + ": " + e.getMessage());
        } finally {
            try {
                if (rs != null) {
                    rs.close();
                }
                if (statement != null) {
                    statement.close();
                }
            } catch (Exception e) {
            }
        }
    
    if (senhaInformado.equals(senhaBanco)) {  
            user = new User(login);  
            recuperaRoles(conn);  
            user.setRoles(roles);  
            return;  
        } else {  
            throw new LoginException("Senha Inválida.");  
        }  
    }

Na linha 32 o NetBeans acusa erro pedindo para criar ou variável, ou campo, ou parâmetro login,
acho que ou a classe está incompleta ou devo criar uma classe o que vocês acham,
enfim o que esse parâmetro representa ou ele é usado mais adiante, criado antes ou que?

4 Respostas

Hebert_Coelho

JAAS com você fazendo a pesquisa no banco? O.o

Até onde eu vi, quem faz a consulta é o proprio containner… O.o

jaissonduarte

fala dessa pesquisa?

public Usuario login(String nome, String senha) {
       Usuario retorno;
        String sql = "from Usuario u WHERE u.nome = :nome and senha = :senha";

        Query q = this.session.createQuery(sql);
        q.setString("nome", nome);
        q.setString("senha", senha);
        retorno = (Usuario) q.uniqueResult();

        return retorno;

    }

esse trecho eu coloquei la junto com todos os dados do usuário
afinal eu quero que outros possam adicionar alterar usuários,
faz parte da minha aplicação
dai fica assim a classe Usuário:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package modelo;

import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Query;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;

/**
 *
 * @author ifrs
 */
@Entity
@Table(name = "usuario")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Usuario.findAll", query = "SELECT u FROM Usuario u"),
    @NamedQuery(name = "Usuario.findByCodigo", query = "SELECT u FROM Usuario u WHERE u.codigo = :codigo"),
    @NamedQuery(name = "Usuario.findByNome", query = "SELECT u FROM Usuario u WHERE u.nome = :nome"),
    @NamedQuery(name = "Usuario.findByEmail", query = "SELECT u FROM Usuario u WHERE u.email = :email"),
    @NamedQuery(name = "Usuario.findBySenha", query = "SELECT u FROM Usuario u WHERE u.senha = :senha")})
public class Usuario implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "codigo")
    private Integer codigo;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 15)
    @Column(name = "nome")
    private String nome;
    // @Pattern(regexp="[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?", message="E-mail inválido")//if the field contains email address consider using this annotation to enforce field validation
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 40)
    @Column(name = "email")
    private String email;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 10)
    @Column(name = "senha")
    private String senha;

    public Usuario() {
    }

    public Usuario(Integer codigo) {
        this.codigo = codigo;
    }

    public Usuario(Integer codigo, String nome, String email, String senha) {
        this.codigo = codigo;
        this.nome = nome;
        this.email = email;
        this.senha = senha;
    }

    public Integer getCodigo() {
        return codigo;
    }

    public void setCodigo(Integer codigo) {
        this.codigo = codigo;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getSenha() {
        return senha;
    }

    public void setSenha(String senha) {
        this.senha = senha;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (codigo != null ? codigo.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Usuario)) {
            return false;
        }
        Usuario other = (Usuario) object;
        if ((this.codigo == null && other.codigo != null) || (this.codigo != null && !this.codigo.equals(other.codigo))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return nome;
    }

    public Usuario login(String nome, String senha) {
       Usuario retorno;

        String sql = "from Usuario u WHERE u.nome = :nome and senha = :senha";
        Query q = this.session.createQuery(sql);
        q.setString("nome", nome);
        q.setString("senha", senha);
        retorno = (Usuario) q.uniqueResult();

        return retorno;

    }

eu acho que esta errado
mas no que

E

pelo que eu vi, no lugar de “login” na linha 32, você tem que colocar “loginInformado”.

jaissonduarte

Como foi que tu viu isso
valeu funcionou

Criado 9 de novembro de 2011
Ultima resposta 9 de nov. de 2011
Respostas 4
Participantes 3