我正在使用 Spring 开发应用程序并使用 Spring security 登录 postgres 数据库,但我无法解决此错误:
Caused by: java.lang.NoClassDefFoundError: org/springframework/dao/support/DaoSupport
at java.lang.ClassLoader.defineClass1(Native Method) [rt.jar:1.7.0_25]
at java.lang.ClassLoader.defineClass(ClassLoader.java:792) [rt.jar:1.7.0_25]
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) [rt.jar:1.7.0_25]
at org.jboss.modules.ModuleClassLoader.doDefineOrLoadClass(ModuleClassLoader.java:327)
at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:391)
... 54 more
Caused by: java.lang.ClassNotFoundException: org.springframework.dao.support.DaoSupport from [Module "deployment.SpringSecurityTest8.war:main" from Service Module Loader]
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:190)
at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:468)
at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:456)
at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398)
at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:120)
... 59 more
09:07:09,554 WARN [org.jboss.modules] (MSC service thread 1-3) Failed to define class org.springframework.security.core.userdetails.jdbc.JdbcDaoImpl in Module "deployment.SpringSecurityTest8.war:main" from Service Module Loader: java.lang.LinkageError: Failed to link org/springframework/security/core/userdetails/jdbc/JdbcDaoImpl (Module "deployment.SpringSecurityTest8.war:main" from Service Module Loader)
at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:396)
at org.jboss.modules.ModuleClassLoader.loadClassLocal(ModuleClassLoader.java:243)
at org.jboss.modules.ModuleClassLoader$1.loadClassLocal(ModuleClassLoader.java:73)
at org.jboss.modules.Module.loadModuleClass(Module.java:517)
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:182)
at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:468)
at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:456)
at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398)
at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:120)
at java.lang.ClassLoader.defineClass1(Native Method) [rt.jar:1.7.0_25]
Caused by: java.lang.ClassNotFoundException: org.springframework.jdbc.core.support.JdbcDaoSupport from [Module "deployment.SpringSecurityTest8.war:main" from Service Module Loader]
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:190)
at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:468)
at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:456)
at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398)
at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:120)
... 46 more
09:07:09,685 WARN [org.jboss.modules] (MSC service thread 1-3) Failed to define class org.springframework.security.provisioning.JdbcUserDetailsManager in Module "deployment.SpringSecurityTest8.war:main" from Service Module Loader: java.lang.LinkageError: Failed to link org/springframework/security/provisioning/JdbcUserDetailsManager (Module "deployment.SpringSecurityTest8.war:main" from Service Module Loader)
at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:396)
at org.jboss.modules.ModuleClassLoader.loadClassLocal(ModuleClassLoader.java:243)
at org.jboss.modules.ModuleClassLoader$1.loadClassLocal(ModuleClassLoader.java:73)
at org.jboss.modules.Module.loadModuleClass(Module.java:517)
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:182)
at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:468)
at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:456)
at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398)
这是 spring-security-configuration.xml
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.1.xsd">
<http auto-config="true" use-expressions="true">
<intercept-url pattern="/admin**" access="ROLE_ADMIN" />
<intercept-url pattern="/emp**" access="ROLE_EMP" />
</http>
<beans:bean id='dataSource'
class='org.springframework.jdbc.datasource.DriverManagerDataSource'>
<beans:property name='driverClassName' value='org.postgresql.Driver' />
<beans:property name='url' value='jdbc:postgresql://localhost:5432/postgres' />
<beans:property name='username' value='postgres' />
<beans:property name='password' value='po' />
<authentication-manager>
<authentication-provider>
<jdbc-user-service
data-source-ref="dataSource"
users-by-username-query='SELECT username, "password", true FROM "DataB".users where username=?'
authorities-by-username-query='select u1.username, u2.authority from "DataB"."users" u1,
"DataB"."authorities" u2 where u1.username = u2.username and u1.username =?' />
</authentication-provider>
</authentication-manager>
有人可以帮忙吗?我花了很多时间在这上面,但仍然能找出问题所在。
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.1.5.RELEASE</version>
</dependency>
事实上
看起来你错过了类路径中的
spring-dao.jar
。那个罐子包含类org.springframework.dao.support.DaoSupport
.
下载它并将其添加到您的类路径中。
值得注意的是
spring-jdbc
取决于:
spring-beans
spring-core
spring-tx
(撰写本文时)
如果您的项目没有像 maven setup 这样的好工具,它将为您处理很多子依赖项。您仍然可以通过转到 Maven 存储库并查看给定版本的 pom.xml 并检查依赖项部分并查看您可能缺少的内容来检查库依赖项。