9

我正在使用带有freemarker的spring作为模板引擎。Freemarker 允许使用 Jsp Taglibs,例如,通过添加

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

到模板,例如允许我使用什么

    <@security.authorize ifNotGranted="ROLE_ADMIN">
        whatever
    </@security.authorize>

但是,Spring/Freemarker 找不到标记库,除非它们被添加到类路径中,所以我添加了

    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-taglibs</artifactId>
        <version>${spring.version}</version>
    </dependency>

到我项目中的 pom.xml 。

但是无论如何,标签都找不到!我必须将 spring-security-taglibs.jar 添加到 WEB-INF/lib 文件夹中才能找到标签。

有人知道为什么必须将 jar 显式添加到 lib 文件夹中吗?就我而言,为什么它们没有被tomcat找到?

编辑@ddekany

谢谢你。stacktrace如下,如果没有将spring-security-taglibs.jar复制到WEB-INF/lib目录下

    No mapping defined for http://www.springframework.org/security/tags 
    The problematic instruction: ---------- ==> assignment: 
            security=JspTaglibs["http://www.springframework.org/security/tags"] 
            [on line 12, column 1 in home.ftl] in user-directive content.main 
            [on line 8, column 9 in home.ftl] in user-directive layout.global 
            [on line 2, column 1 in home.ftl] 
    ---------- Java backtrace for programmers: ----------      
    freemarker.template.TemplateModelException: 
            No mapping defined for http://www.springframework.org/security/tags at         
    freemarker.ext.jsp.TaglibFactory.get(TaglibFactory.java:180) at 
    ...
4

3 回答 3

7

万一其他人遇到这个......

您需要添加弹簧支持文件,如此处所述(只是一些剪切和粘贴)http://static.springsource.org/spring-webflow/docs/2.2.x/reference /html/ch13s09.html

然后添加一些依赖项:

<dependency>
  <groupId>org.springframework.security</groupId>
  <artifactId>spring-security-taglibs</artifactId>
  <version>2.0.0</version>
</dependency>
<dependency>
  <groupId>org.springframework.webflow</groupId>
  <artifactId>spring-faces</artifactId>
  <version>2.3.1.RELEASE</version>
</dependency>

假设您已经完成了所有其他工作,您现在应该能够将 taglib 添加到您的页面中。例如:

xmlns:sec="http://www.springframework.org/security/tags"

< sec:authorize ifAllGranted="USER_ROLE">
Hello user
</sec:authorize>

*必须添加一个空格 b/f 'sec'发表它

于 2012-11-13T01:39:00.000 回答
2

使用这个 Maven 依赖项:

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

org.springframework并且org.springframework.security是具有不同版本号的不同框架。

于 2014-10-10T18:32:11.853 回答
0

Did you include the JspSupportServlet as stated here and here

[EDIT] After reading your post a bit more careful I advise you the read section "JSP.7.3.2" (and onwards) from the JSP specification.

于 2012-08-23T08:16:46.590 回答