Spring 安全:java.lang.ClassNotFoundException:org.springframework.dao.support.DaoSupport

问题描述 投票:0回答:3

我正在使用 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>

有人可以帮忙吗?我花了很多时间在这上面,但仍然能找出问题所在。

spring postgresql security authentication
3个回答
4
投票
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>4.1.5.RELEASE</version>
  </dependency>

事实上


0
投票

看起来你错过了类路径中的

spring-dao.jar
。那个罐子包含类
org.springframework.dao.support.DaoSupport
.

下载它并将其添加到您的类路径中。


0
投票

值得注意的是

spring-jdbc
取决于:

spring-beans
spring-core
spring-tx

(撰写本文时)

如果您的项目没有像 maven setup 这样的好工具,它将为您处理很多子依赖项。您仍然可以通过转到 Maven 存储库并查看给定版本的 pom.xml 并检查依赖项部分并查看您可能缺少的内容来检查库依赖项。

例如spring-jdbc版本6.0.6 pom.xml.

© www.soinside.com 2019 - 2024. All rights reserved.