Usare JWT in Vert.x e Java
In Vert.x abbiamo una libreria apposita per usare JWT.
In questo articolo vediamo come usarlo in Java.
Prima di tuttto accertatevi di avere la dipendenza; se usate Maven:
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-auth-jwt</artifactId>
</dependency>
Qui sotto vi posto una mia classe helper che sto usando in un progetto:
import io.vertx.core.Future;
import io.vertx.core.Vertx;
import io.vertx.core.json.JsonObject;
import io.vertx.ext.auth.JWTOptions;
import io.vertx.ext.auth.PubSecKeyOptions;
import io.vertx.ext.auth.User;
import io.vertx.ext.auth.jwt.JWTAuth;
import io.vertx.ext.auth.jwt.JWTAuthOptions;
public class JwtHelper {
private static final String secret = "VOSTRO_SECRET";
private JWTAuth provider;
public JwtHelper() {
this.provider = JWTAuth.create(Vertx.vertx(), new JWTAuthOptions()
.addPubSecKey(
new PubSecKeyOptions()
.setAlgorithm("HS256")
.setBuffer(secret)
)
);
}
public String relaeseToken() {
return provider.generateToken(
new JsonObject()
.put("username", "mattepuffo"),
new JWTOptions()
.setIgnoreExpiration(true)
.setSubject("mia-api")
.setAlgorithm("HS256")
.setIssuer("mia-api")
);
}
public Future<User> checkToken(String token) {
return provider.authenticate(new JsonObject().put("token", token));
}
}
Allora:
- il metedo releaseToken è quello che lo rilascia; tra le varie cose, ho aggiunto il dato username, al quale potete aggiungere tutti i dati che volete
- il metodo checkToken si occupa di controllare se è valido, e ritorna un Future, che quindi poi va elaborato
Il releaseToken sicuramente lo userete in fase di login; mentre sull'altro metodo mi soffermo un attimo di più.
Io ho fatto una cosa del genere:
String authorization = routingContext.request().getHeader("Authorization");
HttpServerResponse response = routingContext.response();
if (!Strings.isNullOrEmpty(authorization)) { // HO USATO GOOGLE GUAVA
String accessToken = routingContext.request().getHeader(HttpHeaders.AUTHORIZATION).substring("Bearer ".length());
jwtHelper.checkToken(accessToken)
.onSuccess(user -> {
response.putHeader("content-type", "application/json")
.end(String.valueOf(user.principal()));
})
.onFailure(err -> {
response.putHeader("content-type", "application/json")
.end(err.getMessage());
});
} else {
response.putHeader("content-type", "application/json")
.end("Token richiesto");
}
Enjoy!
java vertx maven jwt
Commentami!