Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Problema para criar validação de usuário - Personalizando login e logout

Criado a classe Usuário conforme solicitado na aula.

package br.com.casadocodigo.loja.models;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.OneToMany;

import org.springframework.context.annotation.Role;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;


@Entity
public class Usuario implements UserDetails {
    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Id
    private String email;
    private String nome;
    private String senha;

    @OneToMany(fetch=FetchType.EAGER)
    private List<Role> roles = new ArrayList<Role>();



    // getters and setters

    public String getEmail() {
        return email;
    }

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

    public String getNome() {
        return nome;
    }

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

    public String getSenha() {
        return senha;
    }

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

    public List<Role> getRoles() {
        return roles;
    }

    public void setRoles(List<Role> roles) {
        this.roles = roles;
    }

    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        return this.roles;
    }

    @Override
    public String getPassword() {
        return this.senha;
    }

    @Override
    public String getUsername() {
        return this.email;
    }

    @Override
    public boolean isAccountNonExpired() {
        return true;
    }

    @Override
    public boolean isAccountNonLocked() {
        return true;
    }

    @Override
    public boolean isCredentialsNonExpired() {
        return true;
    }

    @Override
    public boolean isEnabled() {
        return true;
    }

}

Criado a classe Role conforme solicitado na aula.

package br.com.casadocodigo.loja.models;

import javax.persistence.Entity;
import javax.persistence.Id;

import org.springframework.security.core.GrantedAuthority;

@Entity
public class Role implements GrantedAuthority {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    @Id
    private String nome;



    public String getNome() {
        return nome;
    }

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

    @Override
    public String getAuthority() {
        // TODO Auto-generated method stub
        return this.nome;
    }

}

Porém meu código não compila neste método.

    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        return this.roles;
    }

diz que não consegue converter de lista para collection. Já tentei usar o pom que fala no curso, já tentei usar versões mais atualizadas

no momento estou usando dessa forma:

        <!-- <dependecias de segurança> -->

        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-config</artifactId>
        <version>4.1.2.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-taglibs</artifactId>
        <version>4.1.2.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-web</artifactId>
        <version>4.1.2.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-core</artifactId>
        <version>4.1.2.RELEASE</version>
        </dependency>

<!--           <dependency> -->
<!--         <groupId>org.springframework</groupId> -->
<!--         <artifactId>spring-context</artifactId> -->
<!--         <version>5.0.0.RELEASE</version> -->
<!--     </dependency> -->



    </dependencies>


    <!-- <dependecias de segurança> -->
    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone/</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>


  <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-framework-bom</artifactId>
                <version>4.3.2.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

e sem o dependencyManagement, não consigo subir o projeto.

5 respostas

Oi Hesllen, tudo bem ?

Então, isso não devia dar problema, pois List herda de Collection diretamente.

Consegue colocar aqui para gente o erro que está dando ?

Oi Matheus, tudo bom e você?

esse é o log que aparece quando tento subir o Tomcat: https://gist.github.com/Hesllen/b0b13c791751671319a922ded6874de8

E no eclipse aparece dessa forma que está nesse print que coloquei no oneDrive:

https://1drv.ms/i/s!Ajk3bW3ZU3n_wXK5rpZ7yOBgclW4

Agora tentei rodar o projeto por linha de comando do maven, deu o seguinte erro:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project casadocodigo: Compilation failure
[ERROR] /c:/dev/workspaces/fj-11/casadocodigo/src/main/java/br/com/casadocodigo/loja/models/Usuario.java:[70,20] incompatible types: java.util.List<org.springframework.context.annotation.Role> cannot be converted to java.util.Collection<? extends org.springframework.security.core.GrantedAuthority>
solução!

Oi Hesllen,

O que aconteceu é que você importou a classe errado relativo a Role. Provavelmente você queria importar uma classe sua e acabou pegando outra.

Retirei o seguinte import e funcionou, obrigado

import org.springframework.context.annotation.Role;