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.
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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.
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 {
}
}
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!