[英]how to implement MD5 hashing of a string in freemarker
我正在使用Smooks for EDI Translations開發freemarker模板
我只是對16位十六進制格式的字符串執行MD5哈希處理。
我無法在Freemarker邏輯中找到實現Md5哈希的相關語法
嘗試導入時
#import java.security.MessageDigest
在smooks-config.xml文件中的freemarker中,它引發錯誤
原因:freemarker.template.TemplateNotFoundException:找不到名稱為“ java.security.MessageDigest”的模板
FreeMarker模板只能#import
其他FreeMarker模板(請參閱文檔 )。 同樣,通常,您不應該在FreeMarker模板中計算這些東西。 您應該將已經計算出的十六進制字符串傳遞給模板。
但是,如果您不能執行上述操作,則可以用Java編寫一個具有所需方法的小型實用程序對象,然后將其作為“共享變量”添加到FreeMarker數據模型或FreeMarker配置中。 但是,我不知道Smooks是否足以進行配置。
如果Smooks不允許您對FreeMarker進行太多配置(如上所述),則可以用Java編寫TemplateMethodModel
實現來計算所需的值,然后在模板中創建該實例作為<#assign md5 = 'com.example.MyMD5Method'?new()>
,然后可以在FreeMarker中執行${md5(something)}
的操作。 (當然,這要求您可以向應用程序中添加新類。)
如果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)}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.