【问题标题】:Generate token in rest java api在rest java api中生成令牌
【发布时间】:2018-12-17 09:16:44
【问题描述】:

我有一个 Java Restful api(我使用 JAX-RS),我需要创建一个返回令牌的 post 方法。

但是我的方法在方法“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)

【问题讨论】:

  • NoSuchFieldError 表示您正在使用不兼容的库。某些库引用了字段 USE_DEFAULTS,该字段在您的库版本中不存在。检查您的依赖项、它们的文档和 pom。

标签: java rest jax-rs jwt token


【解决方案1】:

我解决了这个问题。

由于 jackson.annotations 库的版本错误,导致方法错误。

我已将其更改为 2.8 版

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-23
    • 2021-02-03
    • 2016-01-19
    • 2018-07-30
    • 2019-08-01
    • 2019-04-01
    • 2019-05-23
    • 2013-12-01
    相关资源
    最近更新 更多