Как реализовать MD5 хеширование строки в freemarker
Я работаю над шаблоном freemarker, используя Smooks для EDI Translations
Я просто выполняю хеширование строки MD5 в 16-значном шестнадцатеричном формате.
Я не могу найти соответствующий синтаксис для реализации хеширования Md5 в логике Freemarker
при попытке импортировать
#import java.security.MessageDigest
в freemarker в файле smooks-config.xml выдает ошибку
Причина: freemarker.template.TemplateNotFoundException: шаблон не найден для имени "java.security.MessageDigest"
2 ответа
Если хеширование Md5 может быть выполнено статическим методом данного класса, и вы действительно не можете выполнить работу до обработки шаблона... вы можете предоставить этот класс шаблону.
Я не знаком со Smooks, но в основном вам нужно сказать Smooks ввести модифицированный FreemarkerManager
который имеет переопределенный метод populateContext
public class MyFreemarkerManager extends FreemarkerManager {
@Override
protected void populateContext(ScopesHashModel model, ValueStack stack, Object action, HttpServletRequest request, HttpServletResponse response) {
super.populateContext(model, stack, action, request, response);
BeansWrapper beansWrapper = new BeansWrapperBuilder(Configuration.VERSION_2_3_24).build();
TemplateHashModel staticModels = beansWrapper.getStaticModels();
TemplateHashModel utils = (TemplateHashModel)staticModels.get("path.to.your.class.Utils");
model.put("Utils", utils);
}
}
Теперь все ваши шаблоны имеют прямой доступ к статическим методам Utils
учебный класс
${Utils.hashMd5(s)}
Шаблоны FreeMarker могут только #import
другие шаблоны FreeMarker (см. документацию). Кроме того, как правило, вы не должны рассчитывать такие вещи в шаблонах FreeMarker. Вы должны передать уже рассчитанную шестнадцатеричную строку в шаблон.
Но, если вы не можете выполнить вышеизложенное, то вы можете написать небольшой Java-объект с необходимыми методами, а затем добавить его в модель данных FreeMarker или в конфигурацию FreeMarker как "разделяемую переменную". Тем не менее, я не знаю, достаточно ли настраивается Smooks для этого.
Если Smooks не позволяет вам настраивать FreeMarker (как указано выше), вы можете написать TemplateMethodModel
реализация в Java, которая вычисляет необходимое значение, а затем создает экземпляр этого в вашем шаблоне как <#assign md5 = 'com.example.MyMD5Method'?new()>
, а потом вы можете делать такие вещи, как ${md5(something)}
в FreeMarker. (Конечно, для этого необходимо добавить новый класс в ваше приложение.)