Spring Security 4 升级后的 java.lang.NoSuchMethodError org.springframework.web.servlet.tags.form.InputTa
Posted
技术标签:
【中文标题】Spring Security 4 升级后的 java.lang.NoSuchMethodError org.springframework.web.servlet.tags.form.InputTag.setDisabled【英文标题】:java.lang.NoSuchMethodError org.springframework.web.servlet.tags.form.InputTag.setDisabled after Spring Security 4 upgrade 【发布时间】:2016-04-29 09:31:15 【问题描述】:我们将应用程序从spring security 3
升级到spring security 4
。
除了访问带有只读或禁用属性的输入标签的视图时,它工作正常。
例如,在尝试显示其中一种违规表单时会引发以下异常:
[org.apache.jasper.JasperException: javax.servlet.ServletException: java.lang.NoSuchMethodError: org.springframework.web.servlet.tags.form.InputTag.setDisabled(Ljava/lang/String;)V]根本原因 java.lang.NoSuchMethodError: org.springframework.web.servlet.tags.form.InputTag.setDisabled(Ljava/lang/String;)
我无法在我们的开发环境中重现该问题。
依赖项由 Maven 管理。
.war
部署在 Tomcat 7 上,该集群在 2 个服务器的集群上运行。
有人认为这是一个类路径问题,并且可能有 Spring 3 类仍然存在,并且在不同的环境中以不同的顺序加载。但据我所知,我们的pom
文件没有引用任何 Spring 3 罐子。
以前有没有人遇到过这种或类似的情况并设法解决它?
【问题讨论】:
你的项目中似乎没有 org.springframework.web.servlet.tags.form.InputTag.setDisabled(String)。你能粘贴你的 pom.xml 文件吗 运行mvn dependency:tree
以查看所有依赖项。
【参考方案1】:
我怀疑您的 tomcat 安装已将您编译的 jsps 缓存在其工作目录中,升级可能需要重新编译 jsps 以获取 Spring 4 的更改。
尝试停止 tomcat,删除工作目录并重新启动,看看是否可以解决问题。
【讨论】:
【参考方案2】:您的应用程序似乎使用旧的 spring 框架,因为在 spring f/w 4 中没有 setDisable(String) 方法。它有 setDisable(boolean)。参见 spring f/w 4 doc http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/servlet/tags/form/AbstracthtmlInputElementTag.html#setDisabled-boolean-
请检查您的 pom .xml,如果没问题,请执行 mvn clean。
【讨论】:
谢谢 Pankaj。这有帮助。我们现在已经设法在 dev 中重现它,并将原因隔离到 Tomcat 容器中。 升级到 spring 4 后我现在也遇到了类似的问题。我注意到在 STS 中使用 tcServer 时不会出现错误。【参考方案3】:我遇到了同样的问题,我通过查看 JSP 中的 JSTL 代码解决了这个问题。您是否设置了除 true 或 false 之外的值?我将一个属性值设置为“只读”(一个字符串!)。但这不再被允许。只能使用“真”或“假”。请参阅下面的更新:
<c:choose>
<c:when test="$canEdit eq 'true'">
<c:set var="isTabReadonly" value="false" />
</c:when>
<c:otherwise>
<c:set var="isTabReadonly" value="readonly" /> // Change to "true"
</c:otherwise>
</c:choose>
【讨论】:
【参考方案4】:如果您使用 Jenkins,请在构建之前完全删除构建目录的内容。特别是如果您像我们一样进行了重大更改。不要相信 Maven 通过 Jenkins 总是会告诉你真相。
从 Java 1.7 上的 Spring 3.2 升级到 Java 1.8 上的 Spring 4.3.x 后,我们遇到了同样的问题。在我们的本地环境(WebSphere Liberty Profile 17、jsp-2.2、servlet-3.0)中一切正常,但在远程环境中的 JSP 中出现此错误(WebSphere 8.5.5.9 Base、jsp-2.2、servlet-3.0)失败。
【讨论】:
【参考方案5】:您可以更改:从 readonly="true"
到 readonly="$true"
和 false all project。
【讨论】:
以上是关于Spring Security 4 升级后的 java.lang.NoSuchMethodError org.springframework.web.servlet.tags.form.InputTa的主要内容,如果未能解决你的问题,请参考以下文章
Spring Security 4.1 升级 - 错误 403 访问被拒绝
spring security3.1升级到4.1问题访问/j_spring_security_check 404
升级后的 Spring Boot Oauth2 自动配置周期