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

Access Denied "RODRIGO AJUDA NOIS!"

Estou seguindo com o curso (com pausa de 5 dias kkkk) e não está fazendo mais login no user que configuramos anteriormente, segue prints do código da ultima aula mais compilação da aplicação rodando (problema possivelmente da senha encriptada, eu acho), como resolver?PS: Não consigo subir imagem de um jeito facil pelo forum :(

{
    "timestamp": "2023-07-07T07:23:00.751+00:00",
    "status": 403,
    "error": "Forbidden",
    "message": "Access Denied",
    "path": "/login"
}
//Retorno insomnia
//AuthController.java

package med.voll.api.controller;

import jakarta.validation.Valid;
import med.voll.api.domain.user.DataAuth;
import med.voll.api.domain.user.User;
import med.voll.api.infra.security.TokenService;
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.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;

@RestController
@RequestMapping("/login")
public class AuthController {

    @Autowired
    private AuthenticationManager manager;
    @Autowired
    private TokenService tokenService;

    @PostMapping
    public ResponseEntity efetuarLogin(@RequestBody @Valid DataAuth dados) {
        var token = new UsernamePasswordAuthenticationToken(dados.login(), dados.password());
        var authentication = manager.authenticate(token);


        return ResponseEntity.ok(tokenService.gerarToken((User) authentication.getPrincipal()));
    }
}
//TokenService.java

package med.voll.api.infra.security;

import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.exceptions.JWTCreationException;
import med.voll.api.domain.user.User;
import org.springframework.stereotype.Service;

import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneOffset;

@Service
public class TokenService {
    public String gerarToken(User user) {
        try {
            var algorithm = Algorithm.HMAC256("12345678");
            return JWT.create()
                    .withIssuer("API Voll.med")
                    .withSubject(user.getLogin())
                    .withClaim("id", user.getId())
                    .withExpiresAt(dataExpiracao())
                    .sign(algorithm);
        } catch (JWTCreationException exception) {
            throw new RuntimeException("Erro ao gerar token JWT", exception);
        }
    }

    private Instant dataExpiracao() {
        return LocalDateTime.now().plusHours(2).toInstant(ZoneOffset.of("-03:00"));
    }
}

PS2: Como sobe imagem no forum? tem que fazer upload antes de fazer postagem? Apare3ce somente: "! [xx] (xx)"

2 respostas
solução!

Oi!

Veja aqui: https://cursos.alura.com.br/course/spring-boot-aplique-boas-praticas-proteja-api-rest/task/130894

Basta colar a imagem aqui e esperar o upload ser realizado, que ele gera essa tag do markdown automático

Mto obrigado Rodrigo, cê é o cara msm pra Spring. Desculpa ser relapso por responder tão depois da sua ajuda. Deu tudo certo, Abs!