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

Error 500

Estou com esse error

forum_1    | java.lang.NullPointerException: null
forum_1    |    at br.com.alura.forum.controller.AutenticacaoController.autenticar(AutenticacaoController.java:37) ~[classes/:na]

    @Bean
    @Override
    protected AuthenticationManager authenticationManager() throws Exception {
        return super.authenticationManager();

    }
    //configura authenticação, login
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(autenticacaoService).passwordEncoder(new BCryptPasswordEncoder());
    }

    //configuracao de autorização, perfil acessos
    @Override
    protected void configure(HttpSecurity http) throws Exception {

        http.authorizeRequests()
        .antMatchers(HttpMethod.GET, "/topicos").permitAll()
        .antMatchers(HttpMethod.GET, "/topicos/*").permitAll()
        .antMatchers(HttpMethod.POST, "/auth").permitAll()
        .anyRequest().authenticated()
        .and().csrf().disable()
        .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
    }
@RestController
@RequestMapping("/auth")
public class AutenticacaoController {

    @Autowired
    private AuthenticationManager authenticationManager;

    private TokenService tokenService;


    @PostMapping
    public ResponseEntity<?> autenticar(@RequestBody @Valid LoginForm form) {

        try {
            UsernamePasswordAuthenticationToken dadosLogin = form.converter();

            Authentication autentication = authenticationManager.authenticate(dadosLogin);
            System.out.println("autentication: " + autentication);
            String token = tokenService.gerarToken(autentication);

            System.out.println("gerarToken: " + token);
            return ResponseEntity.ok().build();

        } catch (AuthenticationException e) {
            return ResponseEntity.badRequest().build();
        }

    }

}

@Service
public class TokenService {


    @Value("${forum.jwt.expiration}")
    private String expiration; 

    @Value("${forum.jwt.secret}")
    private String secret; 

    public String gerarToken(Authentication autentication) {

        Usuario logado = (Usuario) autentication.getPrincipal();
        Date hoje = new Date();

        Date dataExpiracao = new Date(hoje.getTime() + Long.parseLong(expiration));

        System.out.println("dataExpiracao: " + dataExpiracao);

        return Jwts.builder()
                .setIssuer("API do fórum da Alura")
                .setSubject(logado.getId().toString())
                .setIssuedAt(hoje)
                .setExpiration(dataExpiracao)
                .signWith(SignatureAlgorithm.HS256, secret)
                .compact();
    }

}
<dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>0.9.1</version>
        </dependency>
2 respostas
solução!

Oi Julio,

Na classe AutenticaoController faltou o @Autowired no atributo TokenService.

Bons estudos!

Obrigado não tinha percebido

insira seu código aqui