Hibernate Anntotaion @Converter необходимо настроить до Spring Anntotation @propertySource - PullRequest
0 голосов
/ 03 февраля 2020

Я использую @converter (Hibernate) для преобразования pojo в зашифрованном формате из hibernate, но ключ помещается в файл свойств, который не может быть разрешен @propertySource (Spring annotation)

есть ли способ для управления созданием bean в последнем случае.

1 Ответ

0 голосов
/ 03 февраля 2020

Пожалуйста, найдите фрагмент кода ниже для Converter, я создал другой bean-компонент из шифрования / дешифрования, но вы можете создать конфигурационный bean-компонент для свойств и прочитать свойства оттуда.

@Component
@Converter
@Configurable
public class HashMapConverter implements AttributeConverter<Map<String, Object>, String> {

    private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();

    /*
     * Define your application properties bean here and read the properties from
     * there
     */
    private static ConfigEncryptionKeyConverter configEncryptionKeyConverter;

    @Autowired
    public void initEncryptionKeyConverter(ConfigEncryptionKeyConverter configEncryptionKeyConverter) {
        // Set your beans here.
        HashMapConverter.configEncryptionKeyConverter = configEncryptionKeyConverter;
    }

    @Override
    public String convertToDatabaseColumn(Map<String, Object> attribute) {
        try {
            return configEncryptionKeyConverter.convertToDatabaseColumn(OBJECT_MAPPER.writeValueAsString(attribute));
        } catch (final JsonProcessingException e) {
            throw new ApplicationErrorException(e.getLocalizedMessage());
        }
    }

    @SuppressWarnings("unchecked")
    @Override
    public Map<String, Object> convertToEntityAttribute(String dbData) {

        Map<String, Object> attribute = null;
        if (dbData != null) {
            try {
                attribute = OBJECT_MAPPER.readValue(configEncryptionKeyConverter.convertToEntityAttribute(dbData),
                        Map.class);
            } catch (final IOException e) {
                throw new ApplicationErrorException(e.getLocalizedMessage());
            }
        }
        return attribute;

    }

}

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...