Caso mais alguem esteja passando por este erro, a solução é Desabilitar o CRSF (cross-site request forgery) com Spring Security, que é o que causa o erro** (type=Forbidden, status=403).**
Isso foi explicado na aula:
02.Provedor de Autenticação
2.4 -Associando o usuário ao pedido
Porém, eu não estava implementado o método da forma correta, e segui com o curso. Foi quando o instrutor disponibilizou o projeto da aula anterior em:
07.Monitoramento com interceptadores
e fui batendo trecho a trecho de código e vi que na Classe WebSecurityConfig o método csrf estava sendo chamado dentro do método configure:
package br.com.alura.mvc.mudi;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
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.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private DataSource dataSource;
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/home/**")
.permitAll()
.anyRequest()
.authenticated()
.and()
.formLogin(form -> form
.loginPage("/login")
.defaultSuccessUrl("/usuario/pedido", true)
.permitAll()
)
.logout(logout -> {
logout.logoutUrl("/logout")
.logoutSuccessUrl("/home");
}).csrf().disable();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
auth
.jdbcAuthentication()
.dataSource(dataSource)
.passwordEncoder(encoder);
}
}