注入的 PasswordHash 在使用参数初始化时总是抛出空指针

Injected PasswordHash always throws null pointer when initializing with parameters

使用参数初始化注入的PasswordHash实例时,总是抛出空指针异常。

使用几个不同的在线示例,我总是得到相同的结果。这是我遵循的最新示例: https://medium.com/@swhp/explore-hash-feature-on-java-ee-security-jsr-375-soteria-7fe3b1953785 。 IDE 表示注入的 Pbkd2PasswordHash 有一个 "Unsatisfied Dependency: no bean matches the injection point"。这是有道理的,因为它是一个接口,我没有使用该接口创建新的 class。然而,我在网上看到的所有例子都注入了这个 class 而没有实现它。

如果我实现 PasswordHash 或 PBkdf2PasswordHash 接口并覆盖方法,我可以避免空指针,但这违背了传递具有特定迭代、算法、salt 大小的参数的目的,and/or 键大小值。

@Inject
Pbkdf2PasswordHash pbkdfHash;

@PostConstruct
public void init() {
    Map<String, String> parameters = new HashMap<>();

    parameters.put("Pbkdf2PasswordHash.Iterations", "3072");
    parameters.put("Pbkdf2PasswordHash.Algorithm", "PBKDF2WithHmacSHA512");
    parameters.put("Pbkdf2PasswordHash.KeySizeBytes", "64");
    parameters.put("Pbkdf2PasswordHash.SaltSizeBytes", "64");

    this.pbkdfHash.initialize(parameters);
}

我希望当我用参数初始化注入的PasswordHash时,实例会自动散列传入的文本。因为看起来我没有注入任何bean,我只是注入一个接口,它只returns实例初始化时为空指针。

Glassfish 和 Wildfly 作为 Pbkdf2PasswordHashImpl 提供了一个实现。我需要添加 wildfly-ee-security 或 org.glassfish.soteria:javax.security.enterprise 来引入这个 class。我怀疑我正在查看的示例是在不显示 bean 的情况下自己实现 PasswordHash 接口。

感谢 Siliarus 为 Soteria 实施提供 link: https://github.com/javaee/security-soteria/blob/master/impl/src/main/java/org/glassfish/soteria/identitystores/hash/Pbkdf2PasswordHashImpl.java

我现在 运行 遇到有关所需依赖项的构建错误,但这超出了本问题的范围。如果您有兴趣,已经有一个未解决的问题: https://github.com/eclipse-ee4j/soteria/issues/193