Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Integração entre Java (Spring) e JavaScript(AJAX)

Boa tarde galera,

estou desenvolvendo uma aplicação onde a mesma tem painéis, e ao clicar em um painel tenho que enviar um requisição para o servidor retornar os registros referente ao painel.

No back-end estou utilizando o Spring Framework, e o método responsável está da seguinte forma:

OBS: Ainda não está totalmente programado para funcionar como quero, os códigos relatados abaixo são apenas para teste de recepção dos comandos

@RequestMapping(value="/pesquisa", method = RequestMethod.POST, consumes = { MediaType.APPLICATION_JSON_VALUE })
    public @ResponseBody ResponseEntity<?> pesquisar(@RequestBody Conexao conexao){    

        System.out.println(">>>>>>>>>> Id recebido com sucesso: " + conexao);        

        return ResponseEntity.badRequest().body("Erro ao salvar!");
    }

E o JavaScript está da seguinte forma:

OBS: Para que seja de melhor entendimento, postei o código completo

var Aspconexoes = Aspconexoes || {};

Aspconexoes.MostrarConexoes = (function(){

    function MostrarConexoes(){
        this.panel = $('.tituloMunicipio');
    }

    MostrarConexoes.prototype.iniciar = function(){
        this.panel.on('click', enviarMunicipio.bind(this));
    }

    function enviarMunicipio(event){
        var painel = $('.panel-default');
        var expandido = painel.find('.in').length;
        var idMun = event.target.id; 

        console.log('Enviando id: ' + idMun + ' para busca!');        

        $.ajax({
            url: 'conexoes/pesquisa',
            method: 'POST',
            contentType: 'application/json',
            data: JSON.stringify({ id: idMun }),
            success: onPesquisaFeita.bind(this),
            error: onError.bind(this)
        }); 
    }

    function onError(){
        console.log('Deu erro!');
    }

    function onPesquisaFeita(conexao){
        console.log(conexao);        
    }

    return MostrarConexoes;

}());

$(function(){

    var mostrarConexoes = new Aspconexoes.MostrarConexoes();
    mostrarConexoes.iniciar();

});

E o erro que segue sendo apresentado no console do navegador é o seguinte:

Enviando id: 8 para busca!
jquery-2.1.1.min.js:4 POST http://localhost:8080/aspconexoes/conexoes/pesquisa 405 ()
send @ jquery-2.1.1.min.js:4
ajax @ jquery-2.1.1.min.js:4
enviarMunicipio @ main.js:20
dispatch @ jquery-2.1.1.min.js:3
r.handle @ jquery-2.1.1.min.js:3
main.js:31 Deu erro!

Por enquanto é isso pessoal.

1 resposta
solução!

Galera depois de muita leitura no doc do Spring Security verifiquei que o problema é referente ao CSRF, após desabilitado o mesmo, funcionou como esperado, agora que isolado o erro, vou ler mais como deixar o CSRF ativo e passar o token pelo JavaScript para não dar mais o erro 405.

Apenas para fim de conhecimento, para desativar o CSRF no Spring adicionei .csrf().disable() no método configure(HttpSecurity http) ficando assim:

@Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .csrf().disable()
            .authorizeRequests()
                .antMatchers("/municipios/hbuscarMunicipio/**").authenticated()
                .antMatchers("/municipios/buscarMunicipio/**").authenticated()
                .antMatchers("/municipios/").authenticated()
                .antMatchers("/conexoes/pesquisa").authenticated()
                .antMatchers("/conexoes/**").hasRole("ADMINISTRADOR")
                .antMatchers("/municipios/**").hasRole("ADMINISTRADOR")
                .antMatchers("/usuarios/**").hasRole("ADMINISTRADOR")
                .anyRequest().authenticated()
                .and()
            .formLogin()
                .loginPage("/login")
                .permitAll()
                .and()
                .rememberMe()
                .and()
            .logout()
                .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
                .and()
            .exceptionHandling()
                .accessDeniedPage("/403")
                .and()
            .sessionManagement()
                .maximumSessions(1)
                .expiredUrl("/login");
    }

as configurações após o .csrf().disable() são específicas do meu projeto, coloquei apenas para contextualizar.