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

senha em memória

Prezados, gostaria de saber como o spring security sabe que o atributo senha da classe Usuario é a senha que ele deve verificar em memória.

3 respostas

Opa, boa noite.

Veja se o link a seguir te ajuda: https://www.baeldung.com/java-config-spring-security

Basicamente segue:

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) 
      throws Exception {
        auth.inMemoryAuthentication().withUser("user")
          .password(passwordEncoder().encode("password")).roles("USER");
    }
}

Olá Rodrigo.

Essa é a classe disponibilizada no curso para download bem como abordada no video. Não observo o método ConfigureGlobal. Poderia me ajudar a entender onde exatamente a senha é recuperada do banco e confrontada com a informada no login?

A tempo, deixo aqui uma sugestão. Não é a primeira vez que uma resposta neste fórum é registrada sem antes levar em consideração o que foi abordado no curso (seu conteúdo), atentando exclusivamente a pergunta, sem contextualizá-la com a aula referente. Entendo, que antes da resposta, é preciso olhar a aula referente e o fonte exporto. Se eu estiver errado, por favor me desculpe. Abs

package br.com.alura.forum.config.security;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpMethod;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;

import br.com.alura.forum.repository.UsuarioRepository;

@EnableWebSecurity
@Configuration
public class SecurityConfigurations extends WebSecurityConfigurerAdapter {

    @Autowired
    private AutenticacaoService autenticacaoService;

    @Autowired
    private TokenService tokenService;

    @Autowired
    private UsuarioRepository usuarioRepository;

    @Override
    @Bean
    protected AuthenticationManager authenticationManager() throws Exception {
        return super.authenticationManager();
    }

    //Configuracoes de autenticacao
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(autenticacaoService).passwordEncoder(new BCryptPasswordEncoder());
    }

    //Configuracoes de autorizacao
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
        .antMatchers(HttpMethod.GET, "/topicos").permitAll()
        .antMatchers(HttpMethod.GET, "/topicos/*").permitAll()
        .antMatchers(HttpMethod.POST, "/auth").permitAll()
        .anyRequest().authenticated()
        .and().csrf().disable()
        .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
        .and().addFilterBefore(new AutenticacaoViaTokenFilter(tokenService, usuarioRepository), UsernamePasswordAuthenticationFilter.class);
    }


    //Configuracoes de recursos estaticos(js, css, imagens, etc.)
    @Override
    public void configure(WebSecurity web) throws Exception {
    }

}
solução!

Oi Dirley,

O Spring Security sabe que o atributo é o senha da classe Usuario por conta da interface UserDetails que tivemos que implementar.

Nessa interface tem o método que precisamos implementar:

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

O Spring Security chama esse método para saber qual o atributo deve comparar com a senha do banco de dados.

Bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software