Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Erro na autenticação de login

A aplicação sobre sem erro, porem ao tentar se autenticar ocorre o erro:

org.springframework.security.authentication.InternalAuthenticationServiceException: null

2020-04-23 21:24:35.551 ERROR 23404 --- [nio-8080-exec-6] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception

java.lang.IllegalArgumentException: Input is required

São terchos do erro...

6 respostas

Oi Igo,

Compartilha aqui a stack trace completa da exception, para tentarmos identificar melhor o que pode estar acontecendo.

E também o código das suas classes.

Segue o erro

java.base@12.0.1/jdk.internal.misc.Unsafe.park(Native Method) java.base@12.0.1/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:235) java.base@12.0.1/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2123) java.base@12.0.1/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1182) java.base@12.0.1/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:899) java.base@12.0.1/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1054) java.base@12.0.1/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1114) java.base@12.0.1/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) java.base@12.0.1/java.lang.Thread.run(Thread.java:835) 2020-04-27 20:20:50.886 INFO 14472 --- [ restartedMain] ConditionEvaluationReportLoggingListener :

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 2020-04-27 20:20:50.888 ERROR 14472 --- [ restartedMain] o.s.b.d.LoggingFailureAnalysisReporter :


APPLICATION FAILED TO START


Igor,

Vi no seu log que você está utilizando o Java 12 e talvez seja esse o problema.

Tente alterar para o Java 8 ou 11, que são as versões mais compatíveis.

@Rodrigo, agora estou com o Java 11, não apresentou problemas porem, duas coisa me chamaram atenção. a primeiroa é que no tratamento da exceção na classe AutenticacaoController, onde criamos um try / catch, quando ocorrer a exceção, no meu caso não consegue ficar apenas "AuthenticationExpcepition", veja como esta:

package br.com.alura.forum.controller;

import javax.validation.Valid;

import org.h2.security.auth.AuthenticationException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.Authentication; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;

import br.com.alura.forum.config.security.TokenService; import br.com.alura.forum.controller.dto.TokenDto; import br.com.alura.forum.form.LoginForm;

@RestController @RequestMapping("/auth") public class AutenticacaoController {

@Autowired
private AuthenticationManager authManager; 

@Autowired
private TokenService tokenService;

@PostMapping
public ResponseEntity<TokenDto> autenticar(@RequestBody @Valid LoginForm form) throws AuthenticationException{

    UsernamePasswordAuthenticationToken dadosLogin = form.coverter();
       try {
             Authentication authentication = authManager.authenticate(dadosLogin);
             String token = tokenService.gerarToken(authentication);                
              return ResponseEntity.ok(new TokenDto(token,"Bearer"));

    } catch (org.springframework.security.core.AuthenticationException e) {
        return ResponseEntity.badRequest().build();
    }


}

}


Outra coisa é que no Postman quando vamos testar, não apresenta retorno 200 ok, apresenta retorno 400 Bad request

solução!

Oi Igo,

Esse problema do try/catch é porque no seu controller tem esse import incorreto:

import org.h2.security.auth.AuthenticationException;

Apagando esse import vai ser possível no catch deixar apenas AuthetnciationException. So cuidado na hora de fazer import para escolher a classe do pacote do Spring.

O outro problema no Postman, você consegue informar aqui como fez o teste?

Obrigado Rodrigo, funcionou! no caso era um @Autowired em uma variavel que esqueci de colocar para que o Spring podesse injetar.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software