弹簧安全: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>
答案 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没有出现此错误。
这对我有所帮助:
下载spring-security.tld文件并将其放在webapp / WEB-INF / tld文件夹中
将此代码添加到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文件夹中,它将起作用。