Olá, se o nosso projeto da loja fosse um projeto real, acredito eu que na hora do fechamento da compra, nós pegariamos o usuário que está na sessão e enviaríamos para o controller e manipular os dados desse usuário, com o spring security em nosso projeto nós receberíamos esse usuário em nossa action como qualquer outro parâmetro normal, injeção...?
public ModelAndView finalizar(Usuario usuario){
compra.setCliente(usuario.getCliente()).
}