Ola, bom dia, segui as aulas ate a ultima e estava testando a aplicação quando precebi que ao clicar no botao finalizar compra sou redirecionado para a tela de login. Depois de fazer login a aplicação me redireciona para a tela de cadastro de produtos. O comportamento correto seria que eu fosse redirecionado para uma tela de login, ate ai tudo bem, mas depois eu nao deveria voltar para a tela de itens para que ai, quando eu clicasse no botão, finalizar compra, acontecesse o redirecionamento para /pagamento/finalizar ?
Segue meu SecurityConfiguration
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/produtos/form").hasRole("ADMIN")
.antMatchers(HttpMethod.POST,"/produtos").hasRole("ADMIN")
.antMatchers(HttpMethod.GET,"/produtos").hasRole("ADMIN")
.antMatchers("/carrinho/**").permitAll()
.antMatchers("/produtos/detalhe/**").permitAll()
.antMatchers("/usuarios/**").hasRole("ADMIN")
.antMatchers("/resources/**").permitAll()
.antMatchers("/arquivos-sumario/**").permitAll()
.antMatchers("/").permitAll()
.anyRequest().authenticated()
.and().formLogin().loginPage("/login").permitAll()
.and().logout().logoutRequestMatcher(new AntPathRequestMatcher("/logout"));
}
Código que redireciona para finalizar compra
<form:form action="${s:mvcUrl('PC#finalizar').build() }">
<input type="submit" class="checkout" name="checkout" value="Finalizar compra" />
</form:form>
E código que deveria ser executado:
@Controller
@RequestMapping("/pagamento")
@Scope(value=WebApplicationContext.SCOPE_REQUEST)
public class PagamentoController {
@Autowired
private CarrinhoCompras carrinho;
@Autowired
private RestTemplate restTemplate;
@RequestMapping(value="/finalizar")
public Callable<ModelAndView> finalizar(RedirectAttributes att){
return ()->{
String uri = "http://book-payment.herokuapp.com/payment";
String response = "Compra nao efetuada!!!. Erro ao finalizar a compra";
try {
response = restTemplate.postForObject(uri, new DadosPagamento(carrinho.getTotal()), String.class);
System.out.println("Total da compra: " + response);
} catch (HttpClientErrorException e) {
}
att.addFlashAttribute("mensagem", response);
return new ModelAndView("redirect:/produtos");
};
}
}
Entao basicamente são dois pontos, 1º que o redirecionamento não esta acontecendo como devria ser, ao inves de voltar para a tela de itens ele volta para o cadastro de produto 2º o finalizar compra, depois de logado retorna um erro http 500, mas, funcionava normalmente antes implementar o springSecurity