Bom dia, pessoal.
Sou iniciante com o Spring, estou desevolvendo um sisteminha e estou na parte de autenticação/autorização com JWT.
Consegui fazer o processo para inserção de usuario, gerar o token, rotas com o auth e tudo o mais. Porém, tenho uma entidade “nota”, que pertence à “usuario”. Estou tentando fazer a inserção da nota com a FK do id_usuario, ou seja, aquela nota pertence aquele usuário:
@ManyToOne
@JoinColumn(name = "idUsuario")
private Usuario idUsuario;
Gostaria de saber como eu faço o insert puxando automaticamente o idUsuario do usuário logado, para poder relacionar aquela nota com aquele usuario.
Como iniciante esta parte está bem complicada para mim. Desde já agradeço a atenção.
Dentro do seu token JWT você possui uma clain com o id do usuário?
1 curtida
Boa tarde amigo, obrigado pela resposta.
Por enquanto, tenho um metodo para receber as claims, apenas. Eu precisaria passar no jwt o id_usuario (que está no BD) do usuario que está logado? Desculpe minha ignorância, é a primeira vez que mexo.
Na geração de um token JWT temos a possibilidade de customizar o mesmo adicionando clains, nesse caso, no momento da autenticação do usuário é possivel incluir no token o id do usuário autenticado, com esse id adicionado ao token conseguimos identificar o usuário que está consumindo os recursos.
1 curtida
Certo. No caso, meu método que gera o token é este:
//gera o token:
public String generateToken(String username) {
return Jwts.builder()
.setSubject(username)
.setExpiration(new Date(System.currentTimeMillis() + expiration))
.signWith(SignatureAlgorithm.HS512, secret.getBytes())
.compact();
}
neste builder eu consigo setar o ID e utilizá-lo em outras classes? obrigado
É possível!
Tenta adicionar um .claim("user_id", idDoUsiario)
na construção do builder, acredito que deva funcionar.
1 curtida
Bom dia!
Adicionei o .claim. Não reclamou e rodou normalmente, passando uma string e o objeto usuario chamando o idUsuario. Me retornou um java.lang.nullpointexception:
private Usuario usuario;
//gera o token:
public String generateToken(String username) {
return Jwts.builder()
.claim("idUsuario", usuario.getIdUsuario())
para eu entender e tentar me virar sozinho aqui, estou fazendo de forma incorreta? e o resultado esperado seria um novo campo no payload do jwt com o id do usuario, certo? obrigado pela sua ajuda, amigo
A forma como você montou está correta, mas o getIdUsuario vai retornar nulo mesmo, você não está recebendo ele de lugar nenhum, você só declarou e está tentando utilizar, o correto é no momento da geração do token você teria que receber o usuário que foi autenticado na aplicação.
1 curtida