Inserção com FK @ManyToOne - Spring

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