1

弹簧安全: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"] [on line 1, column 1 in macro/header.ftl] in 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

4 回答 4

2

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

代替“tomcat:run”,执行“tomcat:run-war”

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

于 2015-01-29T15:46:34.010 回答
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>
    
于 2012-10-31T13:51:12.883 回答
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不起作用......我已经尝试像你一样使用它,我也遇到了同样的问题。

于 2012-10-18T18:57:22.513 回答
0

这不起作用的原因与 Servlet 容器(也许还有规范)有关。如果您通过命名空间关联标记库,则只有当 JAR 位于 WEB-INF/lib 文件夹中时,它才会自动执行此操作。

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

于 2013-03-02T11:42:25.640 回答