【问题标题】:how to implement MD5 hashing of a string in freemarker如何在freemarker中实现字符串的MD5散列
【发布时间】:2018-09-27 13:52:45
【问题描述】:

我正在使用 Smooks 为 EDI 翻译开发 freemarker 模板

我只是对 16 位十六进制格式的字符串进行 MD5 散列..

我找不到在 Freemarker 逻辑中实现 Md5 散列的相关语法

尝试导入时

#import java.security.MessageDigest

在 smooks-config.xml 文件的 freemarker 中,它会抛出一个错误

原因:freemarker.template.TemplateNotFoundException:找不到名称“java.security.MessageDigest”的模板

【问题讨论】:

  • 我不知道freemakersmooks 但如果它是一个模板引擎,你不能传递它的参数吗?基本上在java中计算MD5哈希,然后作为参数传递

标签: java freemarker smooks


【解决方案1】:

FreeMarker 模板只能#import 其他 FreeMarker 模板(请参阅documentation)。此外,一般来说,您不应该在 FreeMarker 模板中计算此类内容。您应该将已经计算的十六进制字符串传递给模板。

但是,如果您不能执行上述操作,那么您可以在 Java 中编写一个具有所需方法的小型实用程序对象,然后将其添加到 FreeMarker 数据模型中,或者作为“共享变量”添加到 FreeMarker 配置中”。但是,我不知道 Smooks 的配置是否足以做到这一点。

如果 Smooks 不允许您配置 FreeMarker 太多(如上所述),您可以用 Java 编写一个 TemplateMethodModel 实现来计算您需要的值,然后在您的模板中创建一个实例为 <#assign md5 = 'com.example.MyMD5Method'?new()> ,然后您可以在 FreeMarker 中执行 ${md5(something)} 之类的操作。 (当然,这要求您可以向您的应用程序添加一个新类。)

【讨论】:

  • 你有没有在 freemarker 中实现 java 的 TemplateMethodModel 示例...因为我尝试了分配指令它没有成功..我通过执行 freemarker 模板来运行 smooks.jar...
  • 错误信息是什么? (否则谷歌"implements TemplateMethodModel"...)
【解决方案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)}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-04
    • 1970-01-01
    • 1970-01-01
    • 2021-12-21
    • 2010-10-20
    • 2011-09-23
    相关资源
    最近更新 更多