使用Java Web令牌时的NoClassDefFoundError

时间:2018-01-31 19:40:25

标签: java maven jax-rs jwt jjwt

我试图了解java web令牌的用法,所以我想制作一个简单的Web应用程序。我只是创建一个使用jwt的简单登录系统,但在某些时候我得到了java.lang.NoClassDefFoundError: io/jsonwebtoken/Jwts。这是我的相关代码:

Connect.java:

@WebServlet("/Connect")
public class Connect extends HttpServlet {

@Override
public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
    String username = req.getParameter("username");
    String password = req.getParameter("password");

    Jjwt jjwt = new Jjwt();
    jjwt.authorize(username, password);

    if(jjwt.flag == true){
        DatabaseInteractions databaseInteractions = new DatabaseInteractions();
        JsonOutput output = databaseInteractions.getAccountDetails(databaseInteractions.getID(username));
        ServletContext context = getServletContext();

        req.setAttribute("username", username);
        req.setAttribute("btcAmount", output.getBtcAmount());
        req.setAttribute("ethAmount", output.getEthAmount());
        req.setAttribute("xrpAmount", output.getXrpAmount());
        req.setAttribute("trxAmount", output.getTrxAmount());
        req.setAttribute("adaAmount", output.getAdaAmount());
        context.getRequestDispatcher("/Home.jsp").forward(req, resp);
    }

}

@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{


}
}

Jjwt.java:

public class Jjwt{

public boolean flag;

public Jjwt(){
    flag = false;
}

@POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public Response authorize(String username, String password){
    DatabaseInteractions databaseInteractions = new DatabaseInteractions();

    if(databaseInteractions.connectToDatabase() == false){
        System.out.println("Error: Could not connect to database. Please try later ...");
        return Response.status(Response.Status.UNAUTHORIZED).build();
    }

    if(databaseInteractions.login(username, password)){

        String key = "key";
        long time = System.currentTimeMillis();
        String jwt = Jwts.builder()
                .signWith(SignatureAlgorithm.HS256, key)
                .setSubject(username)
                .setIssuedAt(new Date(time))
                .setExpiration(new Date(time+9000))
                .claim("password",password)
                .compact();
        JsonObject jsonObject = Json.createObjectBuilder().add("JWT", jwt).build();
        flag = true;

        return Response.status(Response.Status.CREATED).entity(jsonObject).build();
    }else{
        return Response.status(Response.Status.UNAUTHORIZED).build();
    }

}
}

在Jjwt.java类的String jwt = Jwts.builder()点,我得到了上面提到的错误。我添加了所有必要的依赖项,这里是我的pom.xml(顺便说一句,这是一个Maven项目):

<repositories>
    <repository>
        <id>maven2-repository.java.net</id>
        <name>Java.net Repository for Maven</name>
        <url>http://download.java.net/maven/2/</url>
        <layout>default</layout>
    </repository>
    <repository>
        <id>maven-repository.java.net</id>
        <name>Java.net Maven 1 Repository (legacy)</name>
        <url>http://download.java.net/maven/1</url>
        <layout>legacy</layout>
    </repository>
</repositories>

<dependencies>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.8.9</version>
    </dependency>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-client</artifactId>
        <version>1.6</version>
    </dependency>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-server</artifactId>
        <version>1.6</version>
    </dependency>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-json</artifactId>
        <version>1.6</version>
    </dependency>
    <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>tomcat-servlet-api</artifactId>
        <version>8.5.27</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.ws.rs</groupId>
        <artifactId>javax.ws.rs-api</artifactId>
        <version>2.1-m09</version>
    </dependency>
    <dependency>
        <groupId>javax.json</groupId>
        <artifactId>javax.json-api</artifactId>
        <version>1.0</version>
    </dependency>
    <dependency>
        <groupId>io.jsonwebtoken</groupId>
        <artifactId>jjwt</artifactId>
        <version>0.9.0</version>
    </dependency>
</dependencies>

我在哪里做错了?

编辑:当我添加以下依赖项时:

<dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>2.8.9</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.8.9</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-annotations</artifactId>
        <version>2.8.9</version>
    </dependency>

现在它在同一点上提供java.lang.NoClassDefFoundError: com/fasterxml/jackson/core/JsonProcessingException

0 个答案:

没有答案