静态生成令牌 java api
Generate token in rest java api
我有一个 Java Restful api(我使用 JAX-RS),我需要创建一个 post 方法来 returns 一个令牌.
但是我的方法在 'gerarToken'
方法中给出了异常
有人可以帮助我吗?
按照下面的代码
@POST
@Path("/login")
@Consumes(MediaType.APPLICATION_JSON)
public Response fazerLogin(String credenciais) {
try {
Gson gson = new Gson();
UsuarioTO u = gson.fromJson(credenciais, UsuarioTO.class);
validarCrendenciais(u);
String token = gerarToken(u.getLogin(), 1);
return Response.ok(token).build();
} catch (Exception e) {
e.printStackTrace();
return Response.status(Response.Status.UNAUTHORIZED).build();
}
}
private String gerarToken(String login,Integer expiraEmDias ){
SignatureAlgorithm algoritimoAssinatura = SignatureAlgorithm.HS512;
Date agora = new Date();
Calendar expira = Calendar.getInstance();
expira.add(Calendar.DAY_OF_MONTH, expiraEmDias);
byte[] apiKeySecretBytes = DatatypeConverter.parseBase64Binary("E5c0l4r");
SecretKeySpec key = new SecretKeySpec(apiKeySecretBytes, algoritimoAssinatura.getJcaName());
JwtBuilder construtor = Jwts.builder()
.setIssuedAt(agora)
.setSubject(login)
.setIssuer(login)
.setWith(algoritimoAssinatura,key)
.setExpiration(expira.getTime());
return construtor.compact();
}
在'Jwts.builder'中抛出异常
MappableContainerException 中包含的异常无法映射到响应,重新抛出到 HTTP 容器
java.lang.NoSuchFieldError: USE_DEFAULTS
在 com.fasterxml.jackson.annotation.JsonInclude$Value.(JsonInclude.java:204)
在 com.fasterxml.jackson.databind.cfg.MapperConfig.(MapperConfig.java:44)
在 com.fasterxml.jackson.databind.ObjectMapper.(ObjectMapper.java:549)
在 com.fasterxml.jackson.databind.ObjectMapper.(ObjectMapper.java:465)
在 io.jsonwebtoken.impl.DefaultJwtBuilder.(DefaultJwtBuilder.java:42)
在 io.jsonwebtoken.Jwts.builder(Jwts.java:116)
在 br.gov.es.dataci.aprender.controleacesso.ControleAcesso.gerarToken(ControleAcesso.java:85)
在 br.gov.es.dataci.aprender.controleacesso.ControleAcesso.fazerLogin(ControleAcesso.java:46)
我解决了这个问题。
由于 jackson.annotations 库的版本错误,它给出了方法错误。
我改成了2.8版本
我有一个 Java Restful api(我使用 JAX-RS),我需要创建一个 post 方法来 returns 一个令牌.
但是我的方法在 'gerarToken'
方法中给出了异常有人可以帮助我吗? 按照下面的代码
@POST
@Path("/login")
@Consumes(MediaType.APPLICATION_JSON)
public Response fazerLogin(String credenciais) {
try {
Gson gson = new Gson();
UsuarioTO u = gson.fromJson(credenciais, UsuarioTO.class);
validarCrendenciais(u);
String token = gerarToken(u.getLogin(), 1);
return Response.ok(token).build();
} catch (Exception e) {
e.printStackTrace();
return Response.status(Response.Status.UNAUTHORIZED).build();
}
}
private String gerarToken(String login,Integer expiraEmDias ){
SignatureAlgorithm algoritimoAssinatura = SignatureAlgorithm.HS512;
Date agora = new Date();
Calendar expira = Calendar.getInstance();
expira.add(Calendar.DAY_OF_MONTH, expiraEmDias);
byte[] apiKeySecretBytes = DatatypeConverter.parseBase64Binary("E5c0l4r");
SecretKeySpec key = new SecretKeySpec(apiKeySecretBytes, algoritimoAssinatura.getJcaName());
JwtBuilder construtor = Jwts.builder()
.setIssuedAt(agora)
.setSubject(login)
.setIssuer(login)
.setWith(algoritimoAssinatura,key)
.setExpiration(expira.getTime());
return construtor.compact();
}
在'Jwts.builder'中抛出异常 MappableContainerException 中包含的异常无法映射到响应,重新抛出到 HTTP 容器 java.lang.NoSuchFieldError: USE_DEFAULTS 在 com.fasterxml.jackson.annotation.JsonInclude$Value.(JsonInclude.java:204) 在 com.fasterxml.jackson.databind.cfg.MapperConfig.(MapperConfig.java:44) 在 com.fasterxml.jackson.databind.ObjectMapper.(ObjectMapper.java:549) 在 com.fasterxml.jackson.databind.ObjectMapper.(ObjectMapper.java:465) 在 io.jsonwebtoken.impl.DefaultJwtBuilder.(DefaultJwtBuilder.java:42) 在 io.jsonwebtoken.Jwts.builder(Jwts.java:116) 在 br.gov.es.dataci.aprender.controleacesso.ControleAcesso.gerarToken(ControleAcesso.java:85) 在 br.gov.es.dataci.aprender.controleacesso.ControleAcesso.fazerLogin(ControleAcesso.java:46)
我解决了这个问题。
由于 jackson.annotations 库的版本错误,它给出了方法错误。
我改成了2.8版本