gpt4 book ai didi

java - StandardEvaluationContext 中的 Spring StandardTypeLocator : registering new import prefixes for use in Thymeleaf templates

转载 作者:行者123 更新时间:2023-12-01 22:51:30 25 4
gpt4 key购买 nike

我们正在 View 层中使用 Thymeleaf 模板库开发 Spring MVC (v4) Web 应用程序,并使用提供 SPEL 支持的 Thymeleaf SpringTemplateEngine。

当我们在模板中引用类型时(例如,为了访问静态实用方法或枚举),我们必须包含完全限定名称,因为 Spring StandardEvaluationContext StandardTypeLocator 只知道 java.lang 包默认。我可以在 Spring API 中看到我们需要使用 registerImport(String prefix) 方法将我们自己的包添加到类型定位器,但我不知道如何获取默认评估我们的模板中使用的上下文能够执行此操作。

我想通过替换此类内容来整理我们的 Thymeleaf HTML 模板:

T(org.apache.commons.io.FileUtils).byteCountToDisplaySize(1024)

与:

T(FileUtils).byteCountToDisplaySize(1024)

我尝试将一个EvaluationContext Autowiring 到一个 Controller 中,看看是否可以获取它,但是Spring告诉我没有找到合格的bean。任何建议表示赞赏!

最佳答案

我正在使用基于 JAVA 的 spring 配置。因此,在 spring security 配置类中(必须有一个 @EnableGlobalMethodSecurity(prePostEnabled = true) 注释),我注入(inject)了一个自定义 MethodSecurityExpressionHandler bean:

    @Bean
public MethodSecurityExpressionHandler methodSecurityExpressionHandler() {
DefaultMethodSecurityExpressionHandler expressionHandler = new DefaultMethodSecurityExpressionHandler() {

@Override
public StandardEvaluationContext createEvaluationContextInternal(final Authentication auth, final MethodInvocation mi) {

StandardEvaluationContext evaluationContext = super.createEvaluationContextInternal(auth, mi);

//Register custom package paths, since StandardTypeLocator is only aware of "java.lang"
//So there will be no need to provide a fully qualified path
((StandardTypeLocator) evaluationContext.getTypeLocator()).registerImport("desired.path");

return evaluationContext;
}
};

expressionHandler.setPermissionEvaluator(new ExpressionAccessPermissionEvaluator()); //register some custom PermissionEvaluator if any
return expressionHandler;
}
}

谢谢

关于java - StandardEvaluationContext 中的 Spring StandardTypeLocator : registering new import prefixes for use in Thymeleaf templates,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24674863/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com