freemarker.runtime - 模板处理错误:“没有为http://www.springframework.org/security/tags定义映射”

时间:2012-10-16 08:00:44

标签: tags spring-security freemarker

弹簧安全:3.0.2 的freemarker:2.3.19

我想在freemarker中使用springSecurity标记,但它会抛出此错误:

[16 14:10:46,349错误] [btpool0-0] freemarker.runtime - 模板处理错误:“没有为http://www.springframework.org/security/tags定义映射”

没有为http://www.springframework.org/security/tags

定义映射

有问题的指示:

==>赋值:security = JspTaglibs [“http://www.springframework.org/security/tags”] [第1行,宏/ header.ftl中的第1列]  在user-directive page.bodytemplate [on line 6,items.ftl中的第1列]

FTL:     < #assign security = JspTaglibs [“http://www.springframework.org/security/tags”] />

的pom.xml

    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-taglibs</artifactId>
        <version>3.0.2.RELEASE</version>
    </dependency>

4 个答案:

答案 0 :(得分:2)

如果问题发生在tomcat7-maven-plugin而不是jetty-maven-plugin,你很可能会遇到tomcat7的未完全初始化的servlet上下文。

而不是“tomcat:run”,请执行“tomcat:run-war”

后者确保您的Web应用程序(几乎)完全正在构建和引导,就像在/ WEB-INF / libs中使用jar一样。 freemarker的tlds扫描逻辑就像魅力一样。

答案 1 :(得分:1)

您要下载的标记库似乎包含标记org.springframework.security.taglibs.authz.AclTag。 最后一个版本的Spring Security taglibs(有这个类)是2.0.7版本,因此问题。

您可以将spring更改为2.0版本。或者您可以从https://src.springframework.org/svn/spring-security/branches/spring-2.5-integration-branch/taglibs/src/main/resources/META-INF/security.tld下载security.tld并在freemarker模板上使用它,如下所示:<#assign security=JspTaglibs["/WEB-INF/tlds/security.tld"] />

顺便说一下,我真的不明白为什么http://www.springframework.org/security/tags不起作用......我试图像你一样使用它,我也遇到了同样的问题。

答案 2 :(得分:1)

切换到run-jetty-run maven模块时遇到此错误。 模块jetty:run没有出现此错误。

这对我有所帮助:

  1. 下载spring-security.tld文件并将其放在webapp / WEB-INF / tld文件夹中

  2. 将此代码添加到web.xml:

    <jsp-config>
        <taglib>
            <taglib-uri>http://www.springframework.org/security/tags</taglib-uri>
            <taglib-location>/WEB-INF/tld/spring-security.tld</taglib-location>
        </taglib> 
    </jsp-config>
    

答案 3 :(得分:0)

这不起作用的原因与Servlet容器(可能是规范)有关。如果您正在通过命名空间关联taglib,那么只有当JAR位于WEB-INF / lib文件夹中时,它才会自动执行。

如果将spring-security-taglibs.jar移动到WEB-INF / lib文件夹中,它将起作用。