Na aula o professor obtém as Roles do Banco de Dados, depois de obter o username do Token. Mas também é possível obtê-las diretamente do token, sem precisar ler novamente do BD, uma vez que ele contém as roles e além disso é assinado (ou seja, temos uma garantia de que o usuário não acrescentou roles indevidamente):
fun getAuthentication(jwt: String): Authentication {
val body = Jwts.parser().setSigningKey(secret.toByteArray()).parseClaimsJws(jwt).body
val username = body.subject
val authorities: Collection<GrantedAuthority> = body.get("role", ArrayList::class.java)
.map { it as LinkedHashMap<*, *> }
.map { Role((it["id"] as Int?)?.toLong(), it["nome"] as String) }
return UsernamePasswordAuthenticationToken(
username, null,
authorities
)
}