Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Erro 405 Method Not Allowed

Boa tarde,

Estou com o erro 405 que não consigo resolver, faço a requisição pelo angular para meu controller spring mas recebo esse erro.

Angular:

app.controller('forgotPassword', ['$scope', '$http', 'Notification',function($scope, $http, Notification) {

                $scope.trocaDeSenha = function() {
                    var email = $scope.email
                    console.log(email);
                    $http({
                        method : "POST",
                        url : "/recuperaSenha",
                        contentType : "application/json; charset=utf-8",

                        data : email,

                    }).success(function(data) {

                        Notification.success("Email enviado com sucesso");
                        $('.btn-close-modal-cadastro').click();

                    }).error(function(data) {

                        console.log(data.status);
                        $('.btn-close-modal-cadastro').click();
                        Notification.error("Não foi possivel enviar ");
                    })
                }

            }]);

Controller Spring:

@RequestMapping(value = "recuperaSenha", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)

    public @ResponseBody String sendEmail(@RequestBody String email) {

        SimpleMailMessage message = new SimpleMailMessage();
    System.out.println("cheguei no controller da senha");
    System.out.println(email);
    User usuario = new User();

    usuario = dao.findbByEmail(email);
    System.out.println(usuario);



        message.setText("https://app-13-96-10020.ide.cronapp.io/#/recuperaSenhaView/token/?token=" + usuario.getHashRecover());
        message.setTo(email);
        message.setFrom("xxxxxxxxxxxxxxxxx");
        sender.send(message);
        return "{\"status\": \"ok\"}";
    }

classe de autorização de request do Spring:

@Component
public class SecurityPermission implements Permission {

    public static final String ROLE_ADMIN_NAME = "Administrators";

  @Override
  public void loadSecurityPermission(HttpSecurity http) throws Exception {

    // public
      http.authorizeRequests().antMatchers("/api/cronapi/**").permitAll();
      http.authorizeRequests().antMatchers("/auth/**").permitAll();
      http.authorizeRequests().antMatchers("/components/**").permitAll();
      http.authorizeRequests().antMatchers("/css/**").permitAll();
      http.authorizeRequests().antMatchers("/device/**").permitAll();
      http.authorizeRequests().antMatchers("/favicon.ico").permitAll();
      http.authorizeRequests().antMatchers("/adicionaUsuario").permitAll();
      http.authorizeRequests().antMatchers("/i18n/**").permitAll();
      http.authorizeRequests().antMatchers("/img/**").permitAll();
      http.authorizeRequests().antMatchers("/index.html").permitAll();
      http.authorizeRequests().antMatchers("/js/**").permitAll();
      http.authorizeRequests().antMatchers("/lib/**").permitAll();
      http.authorizeRequests().antMatchers("/recuperaSenha").permitAll();
      http.authorizeRequests().antMatchers("/recuperaSenhaView**").permitAll();
      http.authorizeRequests().antMatchers("/recuperaSenhaView/token/**").permitAll();
      http.authorizeRequests().antMatchers("/plugins/**").permitAll();
      http.authorizeRequests().antMatchers("/public/**").permitAll();
      http.authorizeRequests().antMatchers("/signin/**").permitAll();
      http.authorizeRequests().antMatchers("/views/error/**").permitAll();
      http.authorizeRequests().antMatchers("/views/login.view.html").permitAll();
      http.authorizeRequests().antMatchers("/views/public/**").permitAll();

Testando varias opções para descobrir o que acontece descobri o seguinte:

1- Se eu tiro a permissão na classe do Spring, ele retorna sucesso no controller do Angular, mas claro ele nao envia o email, mas ele não deveria dar o erro 404?

2- Eu posso apagar o meu controller Spring inteiro e ele continua dando o erro 405, não deveria dar o 404 de novo? pois eu nao tenho quem atenda essa requisição.

Se alguém souber de alguma coisa, ou ver algum detalhe que eu perdi, vou agradecer muito.

obrigado.

2 respostas

Tem bastante código.. .meu primeiro chute é que esse parametro email não está indo com um json válido... Talvez não fosse para retornar 405, mas talvez seja o código que o spring mvc decidiu para esses casos.

solução

Alberto eu acho que descobri o que está acontecendo mas nao sei como resolver.

Quando eu subo o Toncat, por alguma motivo ele para de mapear o controller, pelo log consigo ver que ele mapeia assim:

 [ost-startStop-1] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]

Só que meus Controllers não estão no log, eles pararam de ser mapeados.

como eu resolvo isso?

obrigado.