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.
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!