簡體   English   中英

BouncyCastle ClassNotFoundException部署到WildFly

[英]BouncyCastle ClassNotFoundException on deployment to WildFly

我想使用BouncyCastle API(v 1.52)在WildFly服務器上的Web應用程序中使用PBKDF2WithHmacSHA1-alogrithm對密碼進行哈希處理。 但是,總是在部署應用程序時從服務器獲取“ ClassNotFoundException org.bouncycastle.crypto.PBEParametersGenerator”。 我正在使用Eclipse Mars和WildFly 8.2.0和9.0.1。 我在Eclipse中的項目中沒有任何錯誤。 我已經嘗試按照此處另一個主題中的描述,將BouncyCastle JAR添加到我的類路徑中,但這沒有幫助。 我想知道為什么我在這里或Google上找不到關於此問題的任何其他結果,有人可以幫助我嗎? 我知道Java 8具有PBKDF2WithHmacSHA256實現,但是我仍然想使用BouncyCastle API作為替代。

這是一個產生上述錯誤的項目的非常簡單的示例:

BouncyCastleHasher.java:

import java.util.Arrays;
import java.util.Base64;

import javax.faces.bean.ManagedBean;
import org.bouncycastle.crypto.PBEParametersGenerator;
import org.bouncycastle.crypto.generators.PKCS5S2ParametersGenerator;
import org.bouncycastle.crypto.params.KeyParameter;

@ManagedBean
public class BouncyCastleHasher {
    private String input;
    private String output;

    public String hash() {
        if(input!=null) {
            byte[] salt = "12345678".getBytes();
            PBEParametersGenerator generator = new PKCS5S2ParametersGenerator();
            generator.init(PBEParametersGenerator.PKCS5PasswordToUTF8Bytes(input.toCharArray()), salt, 1);
            KeyParameter params = (KeyParameter)generator.generateDerivedParameters(128);
            byte[] hash = Arrays.toString(params.getKey()).getBytes();
            String encodedText = Base64.getEncoder().encodeToString(hash);
            setOutput(encodedText);
        }
        return "out";
    }

    public String getInput() {
        return input;
    }

    public void setInput(String input) {
        this.input = input;
    }

    public String getOutput() {
        return output;
    }

    public void setOutput(String output) {
        this.output = output;
    }
}

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>Test_BouncyCastle</display-name>
  <welcome-file-list>
    <welcome-file>in.xhtml</welcome-file>
  </welcome-file-list>
</web-app>

in.xhtml:

<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://xmlns.jcp.org/jsf/core"
    xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
    xmlns:a="http://xmlns.jcp.org/jsf/passthrough"
    xmlns:h="http://xmlns.jcp.org/jsf/html">
<h:head>
    <title>Hashing site</title>
</h:head>
<h:body>
    <h:form>
        <table>
            <tr>
                <td>
                    <h:outputText value="Text to hash:" />
                </td>
                <td>
                    <h:inputText value="#{bouncyCastleHasher.input}" ></h:inputText>
                </td>
            </tr>
            <tr>
                <td>
                    <h:commandButton value="Save"
                        action="#{bouncyCastleHasher.hash}"></h:commandButton>
                </td>
            </tr>
        </table>
    </h:form>
</h:body>
</html>

out.xhtml:

<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://xmlns.jcp.org/jsf/core"
    xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
    xmlns:a="http://xmlns.jcp.org/jsf/passthrough"
    xmlns:h="http://xmlns.jcp.org/jsf/html">
<h:head>
    <title>Result</title>
</h:head>
<h:body>
    <h:form>
        <table>
            <tr>
                <td>
                    <h:outputText value="hashed text:" />
                </td>
                <td>
                    <h:outputText value="#{bouncyCastleHasher.output}"></h:outputText>
                </td>
            </tr>
        </table>
    </h:form>
    <h:link outcome="in"/>
</h:body>
</html>

BouncyCastle庫作為JBoss模塊包含在WildFly發行版中。

請嘗試將org.bouncycastle模塊導入您的應用程序,並確保WAR中不包含BouncyCastle庫的副本,例如,通過為POM中的BouncyCastle依賴項使用provided范圍。

有關導入模塊的更多詳細信息,請參見WildFly中的類加載

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM