6
respostas

Personalizando o Login e Logout

1 - A tabela Usuario e Usuario_Role e o seus relacionamento tem que ser criado diretamente no BD? 2 - Se sim qual o curso que trata deste tópico?

6 respostas

Oi Vinicius,

Não precisa não pois utilizamos a JPA com o Hibernate que gera automaticamente as tabelas no BD.

Abraço!

Bom dia!

Joviane, concordo com você porém mesmo desenvolvendo passo a passo, não foi criada essas duas tabelas no BD. Tive que fazer manualmente. Agora ela loga, porem dá o erro 403 de acesso negado.

Estranho ele não criar automaticamente, como está a sua configuração de hibernate.hbm2ddl.auto? Esta informação está dentro da classe que você configurou a JPA.

O erro de 403 deve ser por conta de permissão do seu usuário. Posta aqui como está a sua configuração do Spring Security e como está a Role do usuário que você quer logar na tabela do BD.

Abraço!

1 - props.setProperty("hibernate.hbm2ddl.auto", "update"); 2 -

@EnableWebMvcSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter{

    @Autowired    
    private UsuarioDAO UsuarioDAO;


    @Override
    protected void configure(HttpSecurity http) throws Exception {

        http.authorizeRequests()

        .antMatchers("/produtos/form").hasRole("ADMIN")
        .antMatchers(HttpMethod.POST, "/produtos").hasRole("ADMIN")
        .antMatchers(HttpMethod.GET, "/produtos").hasRole("ADMIN")
        .antMatchers("/produtos/**").permitAll()
        .antMatchers("/").permitAll()
        .anyRequest().authenticated()
        .and().formLogin();
    }

3 - @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() {

        return this.nome;
    }


}


     @Override
        protected void configure(AuthenticationManagerBuilder auth) throws Exception {
            auth.userDetailsService(UsuarioDAO)
            .passwordEncoder(new BCryptPasswordEncoder());

        }

}

É Vinicius,

Deveria ter atualizado mesmo a sua tabela no banco já que está como update na propriedade hibernate.hbm2ddl.auto.

O usuário que você quer logar está com o campo nome da tabela Role como ROLE_ADMIN? O Spring Security concatena ROLE_ antes do nome da Role que você passa no método hasRole. Se não estiver assim, é só alterar direto na tabela que deve funcionar.

Abraço!

Acho que as minhas tabelas estão com problema.

1 - Criei as seguintes tabelas manualmente no BD

Tabela Role

nome

Tabela Usuario email nome

senha

Tabela Usuario Rede Usuario_email roles_nome