0

我使用 Spring Security 创建了一个 Web 应用程序登录表单。但是我在运行它时遇到了很多错误。请帮帮我。我是弹簧新手。

错误日志是:

Context initialization failed
java.lang.NoClassDefFoundError: org/springframework/dao/DataAccessException
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
at java.lang.Class.getDeclaredMethods(Unknown Source)
at org.springframework.core.type.StandardAnnotationMetadata.hasAnnotatedMethods(StandardAnnotationMetadata.java:136)
at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.checkConfigurationClassCandidate(ConfigurationClassBeanDefinitionReader.java:318)
at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:172)
at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:142)
at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:599)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:407)
at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:276)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:197)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4939)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5434)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: org.springframework.dao.DataAccessException
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
... 22 more

Sep 27, 2013 3:12:35 PM org.apache.catalina.core.StandardContext listenerStart
SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
java.lang.NoClassDefFoundError: org/springframework/dao/DataAccessException
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
at java.lang.Class.getDeclaredMethods(Unknown Source)
at org.springframework.core.type.StandardAnnotationMetadata.hasAnnotatedMethods(StandardAnnotationMetadata.java:136)
at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.checkConfigurationClassCandidate(ConfigurationClassBeanDefinitionReader.java:318)
at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:172)
at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:142)
at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:599)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:407)
at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:276)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:197)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4939)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5434)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: org.springframework.dao.DataAccessException
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
... 22 more

我的 web.xml 也是:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://java.sun.com/xml/ns/javaee"  xmlns:web="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee  http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
        version="2.4">
        <display-name>SpringSecurityDemo</display-name>
        <description>SpringSecurityDemo</description>

        <servlet>
                    <servlet-name>dispatcher</servlet-name>
                    <servlet-class>org.springframework.web.servlet.DispatcherServlet
                    </servlet-class>
                    <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
                    <servlet-name>dispatcher</servlet-name>
                    <url-pattern>*.do</url-pattern>
        </servlet-mapping>
        <listener>
                    <listener-class>org.springframework.web.context.ContextLoaderListener
                    </listener-class>
        </listener>

        <context-param>
                                <param-name>contextConfigLocation</param-name>
                                <param-value>
                                /WEB-INF/dispatcher-servlet.xml,
                                /WEB-INF/spring-security.xml
                                </param-value>
        </context-param>

        <!-- Spring Security -->
        <filter>
                    <filter-name>springSecurityFilterChain</filter-name>
                    <filter-class>
              org.springframework.web.filter.DelegatingFilterProxy
            </filter-class>
        </filter>
        <filter-mapping>
                    <filter-name>springSecurityFilterChain</filter-name>
                    <url-pattern>/*</url-pattern>
        </filter-mapping>

</web-app>

Dispatcher-servlet.xml 是

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans-2.5.xsd    http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context.xsd">

        <context:annotation-config />

        <context:component-scan base-package="com.pkg.controller" />

        <bean
                    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
                    <property name="prefix">
                                <value>/WEB-INF/pages/</value>
                    </property>
                    <property name="suffix">
                                <value>.jsp</value>
                    </property>
        </bean>

       <bean id="dataSource"  class="org.springframework.jdbc.datasource.DriverManagerDataSource">
                    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
                    <property name="url" value="jdbc:mysql://localhost:3306/logindb" />
                    <property name="username" value="root" />
                    <property name="password" value="admin" />
       </bean>

</beans>        

Spring-security.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.0.3.xsd">
        <http auto-config="true">
                    <intercept-url pattern="/loginForm.jsp" filters="none"/>
                    <intercept-url pattern="/**" access="ROLE_USER" />
                    <form-login login-page="/loginForm.jsp" default-target-url="/login.do"
always-use-default-target="true"
                                authentication-failure-url="/loginForm.jsp?login_error=1" />
                    <logout logout-success-url="/loginForm.jsp" />
        </http>
        <authentication-manager>
                    <authentication-provider>
                                <jdbc-user-service data-source-ref="dataSource"
                       users-by-username-query="
                          select username,password, enabled
                          from users where username=?"
                       authorities-by-username-query="
                          select u.username, ur.authority from users u, user_roles ur
                          where u.user_id = ur.user_id and u.username=?"
                         />
                    </authentication-provider>
        </authentication-manager>
</beans:beans>

项目在 WEB_INF/lib 文件夹中有以下提到的 jar:

commons.logging-1.1.1.jar 
hibernate-validator-4.0.2.GA.jar 
javax.validation-1.0.0.GA.jar 
jstl-1.2.jar 
mysql-connector-java-5.1.9.jar 
org.springframework.aop-sources-3.0.5.RELEASE.jar 
org.springframework.web.servlet-3.0.1.RELEASE-A.jar 
spring-asm-3.0.3.RELEASE.jar 
spring-aspects-3.0.5.RELEASE.jar 
spring-beans-3.0.3.RELEASE.jar 
spring-context-3.0.3.RELEASE.jar 
spring-core-3.0.5.RELEASE.jar 
spring-expression-3.0.3.RELEASE.jar 
spring-jdbc-3.0.5.RELEASE.jar 
spring-security-acl-3.0.5.RELEASE-sources.jar 
spring-security-config-3.0.5.RELEASE.jar
spring-security-core-3.0.5.RELEASE.jar 
spring-security-taglibs-3.0.5.RELEASE.jar 
spring-security-web-3.0.5.RELEASE.jar 
spring-tx-3.0.5.RELEASE.jar 
spring-web-3.0.5.RELEASE.jar 
spring-webmvc-3.0.5.RELEASE.jar 

登录表单.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
<title>spring security database login demo</title>
</head>
<body>
<table>
    <tr>
        <td valign="top"><c:if test="${not empty param.login_error}">
                <font color="red"> Invalid user name or password, try again.<br />
                    <br />
                </font>
            </c:if>
            <form name="login_form"
                action="<c:url value='j_spring_security_check'/>" method="POST">
                <div>
                    <table width="40%" border="0" cellpadding="0" cellspacing="0">
                        <tr>
                            <td valign="top">
                                <table border="0" cellspacing="0" cellpadding="4" width="40%">
                                    <tr>
                                         <td colspan="2">Login
                                            <hr width="100%" size="1" noshade align="left">
                                        </td>
                                        <td></td>
                                    </tr>
                                    <tr>
                                        <td width="80">Username</td>
                                        <td valign="top" align="left"><input type='text'
                                            id='username' size="30" maxlength="40" name='j_username'
                                            value='<c:if test="${not empty param.login_error}">
                                                 <c:out value="${SPRING_SECURITY_LAST_USERNAME}"/> </c:if>' />
                                        </td>
                                    </tr>
                                    <tr>
                                        <td width="80">Password</td>
                                        <td valign="top" align="left"><input type='password'
                                            name='j_password' size="30" maxlength="30"></td>
                                    </tr>
                                    <tr>
                                        <td></td>
                                        <td><input type="submit" value="Submit" /></td>
                                    </tr>
                                </table>
                            </td>
                        </tr>
                    </table>
                </div>
            </form></td>
    </tr>
</table>
</body>
</html>

上面我已经发布了我的调度器 servlet 以及 spring security 和 web.xml 请让我知道我在哪里犯了错误

4

1 回答 1

2

当您收到这样的错误时:

java.lang.NoClassDefFoundError: org/springframework/aop/config/AbstractInterceptorDrivenBeanDefinitionDecorator

这意味着你的类路径丢失了一些东西,在这种情况下是一个名为 .jar 的 jar 文件spring-aop-[version].jar

此外,看起来您的 xml 文件正在使用不同版本的 spring-beans.xsd。您应该尽可能升级到最新版本。

于 2013-09-26T18:11:17.503 回答