Fala matcastro, tudo bem ?
Bom que já conseguiu pegar a causa do primeiro problema.
Quando a questão do problema com a proteção contra CSRF, dê uma olhada nessa task do curso -> https://cursos.alura.com.br/course/springmvc-2-integracao-cache-seguranca-e-templates/task/12249
Nessa tarefa é explicada a ideia dos ataques conhecidos como CSRF (Cross Site Request Forgery). Aqueles ataques onde requisições maliciosas são feitas para nosso servidor enviando nosso id de sessão tentando se passar por um usuário real do sistema. Muito comum de ser feito através de formulários fake adicionados em paginas da nossa aplicação.
O Spring Security quando ativado na nossa aplicação ja ativa um recurso padrão que é a proteção contra esses ataques. Essa proteção se baseia em esperar um token csrf valido vindo em cada requisição do tipo post. Ou seja, todo form da nossa app, precisa enviar além dos dados normais, mais esse token, para o spring security validar. (Por isso que estava dando o erro inicialmente, como o token não estava presente, ele recusava a requisição, respondendo um 403 Forbidden).
Com o código que você adicionou: http.csrf().disable()
; você está desativando na configuração programática esse recurso de proteção (o que não é recomendado). Deveríamos contar com a proteção.
É bem fácil cumprir o que ele nos obriga nas nossas requisições do tipo post e nos mantermos protegidos. Basta adicionar em cada formulário um input adicional que enviará o token: <input type="hidden" name="${_csrf.parameterName }" value="${_csrf.token }" />
. Perceba que ambos os valores de name
e value
já são gerados dinamicamente pelo próprio Spring Security e disponibilizados via expression language.
Com esse token sendo enviado em cada post o problema será resolvido.
Espero ter ajudado. Abraço!