【问题标题】:Spring-Security 3.1 java.lang.ClassNotFoundException: org.springframework.security.taglibs.authz.AuthorizeTagSpring-Security 3.1 java.lang.ClassNotFoundException:org.springframework.security.taglibs.authz.AuthorizeTag
【发布时间】:2011-10-06 17:51:57
【问题描述】:

我刚刚从 Spring Security 3.0.5 升级到 3.1.0.RC3

现在,下面的 JSP 代码给了我java.lang.ClassNotFoundException: org.springframework.security.taglibs.authz.AuthorizeTag

<security:authorize access="not hasRole('ROLE_ANONYMOUS')">
Welcome <%= request.getUserPrincipal().getName() %>
</security:authorize>

我查看了Spring Security Reference Documentation 3.1,看起来&lt;security:authorize&gt; 标签应该可以工作。但是,当我查看spring-security-taglibs-3.1.0.RC3.jar 中的目录org.springframework.security.taglibs.authz 时,我在那里看不到任何AuthorizeTag.class

这里有什么问题?

谢谢!

【问题讨论】:

  • 你试过用你的异常挖掘网络吗?
  • 是的,没有运气。我在 3.1 org.springframework.security.taglibs.authz 目录 JspAuthorizeTag.class 中看到,所以我尝试了类似 &lt;security:jspauthorize&gt; 的东西,但是 Eclipse 告诉我没有这样的标签。另外,查看课程列表static.springsource.org/spring-security/site/docs/3.1.x/apidocs/… 似乎没有这样的课程AuthorizeTag
  • 请求 rapt :请让@Simon 回答正确,以便其他人可以轻松找到解决方案。对我来说,同样的事情也有效。

标签: spring spring-security jsp-tags


【解决方案1】:

我发现Tomcat可能会缓存旧的security.tld,甚至spring安全库都是3.1版本。删除 Tomcat 工作目录并重新启动它现在可以正常工作了。

【讨论】:

  • 是的,对我有用 :)(使用 eclipse:右键单击 Tomcat 服务器/清理 Tomcat 工作目录)
【解决方案2】:

我猜你在某处有一个旧的security.tld 文件。确保您没有将其复制到您的 WEB-INF 中,并且您的类路径中没有任何旧的 Spring Security jar。

【讨论】:

  • taglibs jar 中有JspAuthorizeTag.class 而不是AuthorizeTag.class 是什么意思?
  • @rapt:这意味着他们重命名了该类。但是,taglib definition file 中定义的标签名称保持不变。所以,如果标签名称被解析为旧类,你应该在某处有一个旧的标签库定义。
  • 谢谢。我同意旧的security.tld 可能会导致它,但我不知道它是如何发生的。我在 Tomcat 6 中使用 Eclipse Helios。我从WEB-INF\lib 中删除了所有 3.0.5 jar,然后从 3.1 安全 jar 中删除了所有新 jar。 spring-security-taglibs-3.1.0.RC3.jar 包含一个目录META-INF,里面有security.tld - 这应该足以避免我的问题,对吧? --- 现在神秘地在我从 Eclipse 重新启动 Tomcat 2 次后,&lt;security:authorize&gt; 又开始了。知道为什么我会遇到这个问题(我没有更改应用程序)吗?
【解决方案3】:

重命名为 JspAuthorizeTag

(org.springframework.security.taglibs.authz.JspAuthorizeTag)

【讨论】:

    【解决方案4】:

    尝试更新 security.tld (3.0.0.RELEASE):

    <tag-class>org.springframework.security.taglibs.authz.AuthorizeTag</tag-class>
    

    <tag-class>org.springframework.security.taglibs.authz.JspAuthorizeTag</tag-class>
    

    这适用于我使用 FreeMarker 的配置项目

    <#assign security=JspTaglibs["/WEB-INF/tlds/security.tld"] />
    

    mvn jetty:runmvn tomcat:run)。 ;-)

    【讨论】:

      【解决方案5】:

      为了在 Spring MVC 中解决这个问题,

      您需要在 pom.xml 文件中添加 jar/依赖项。

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

      添加taglib jar文件后,你必须将包导入到你的JSP文件中。

      <%@ page import="org.springframework.security.taglibs.authz.JspAuthorizeTag "%> 
      

      请从您的 JSP 文件中删除 taglib Uri &lt;%@ taglib prefix="authz" uri="http://www.springframework.org/security/tags"%&gt;

      【讨论】:

        猜你喜欢
        • 2012-03-06
        • 1970-01-01
        • 2012-12-04
        • 1970-01-01
        • 1970-01-01
        • 2012-03-04
        • 2016-05-06
        • 2012-02-18
        • 2013-09-25
        相关资源
        最近更新 更多