首页 > 解决方案 > 无法为 Spring CryptoFactoryBean 设置 Crypto Provider

问题描述

尝试为 Spring Boot 的实例设置加密提供程序时CryptoFactoryBean,您需要使用扩展 Apache 类的Crypto类。但是,当前的 Apache WSS4J 加密提供者都没有真正扩展Crypto该类——它们扩展CryptoBase了实现Crypto. 在 Eclipse 中,以下代码会抛出错误:

    @Bean
    public CryptoFactoryBean serverKeyStoreCryptoFactoryBean() throws IOException {

        CryptoFactoryBean cryptoFactoryBean = new CryptoFactoryBean();
        try {
            cryptoFactoryBean.setKeyStoreLocation(new ClassPathResource("keystore.jks"));
            cryptoFactoryBean.setKeyStorePassword(keyStorePassword);
            cryptoFactoryBean.setCryptoProvider(new Merlin());
        } catch (Exception e) {
            LOGGER.error("Crypto Factory Bean: unable to set the keystore location or password", e);
        }

        return cryptoFactoryBean;
    }

该错误表明,由于Merlin该类没有扩展Crypto该类,因此它不能用作加密提供者,尽管它是为Crypto该类创建和实现的。

我需要创建一个工厂来执行此操作吗?

标签: javaapachespring-bootwss4j

解决方案


设置加密提供程序时,您需要实际传入类本身。例如,cryptoFactoryBean.setCryptoProvider(Merlin.class);


推荐阅读