使用Spring Security进行身份验证

时间:2012-12-09 19:34:10

标签: spring-mvc spring-security

我正在通过连接到LDAP来尝试使用Spring Security的第一个演示。

我使用的Sping版本是: 3.1.0.RELEASE

这是我的security-integration.xml:

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:security="http://www.springframework.org/schema/security"
       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.1.xsd
          http://www.springframework.org/schema/security
          http://www.springframework.org/schema/security/spring-security-3.1.xsd">

  <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
      <list>
        <value>classpath:com/demo/spring/security.properties</value>
      </list>
    </property>   </bean>

  <security:http auto-config='false' access-denied-page="/accessDenied" use-expressions="true">


    <!--I've removed login."htm"?error=true-->
    <security:form-login
      login-page="/login"
      authentication-failure-url="/login?error=true"
      login-processing-url="/loginProcess"
      default-target-url="/home"/>

    <!--<security:logout-->
      <!--invalidate-session="true"-->
      <!--logout-success-url="/login"-->
      <!--logout-url="/logout"/>-->

  </security:http>

  <bean id="contextSource"
        class="org.springframework.security.ldap.DefaultSpringSecurityContextSource">
    <constructor-arg value="${securityContextSource.url}"/>
    <property name="userDn" value="${securityContextSource.userDn}"/>
    <property name="password" value="${securityContextSource.password}"/>   </bean>

  <bean id="userSearch" class="org.springframework.security.ldap.search.FilterBasedLdapUserSearch">
    <constructor-arg index="0" value="${filterBasedLdapUserSearch.searchBase}"/>
    <constructor-arg index="1" value="${filterBasedLdapUserSearch.searchFilter}"/>
    <constructor-arg index="2" ref="contextSource"/>   </bean>

  <bean id="bindAuthenticator" class="org.springframework.security.ldap.authentication.BindAuthenticator">
    <constructor-arg ref="contextSource"/>
    <property name="userSearch" ref="userSearch"/>   </bean>


    <bean id="ldapAuthProvider"
          class="org.springframework.security.ldap.authentication.LdapAuthenticationProvider">
      <constructor-arg  ref="bindAuthenticator"/>
    </bean>

    <security:authentication-manager>
        <security:authentication-provider ref="ldapAuthProvider"/>
    </security:authentication-manager>

</beans>

但是,每当我部署战争时,我都会遇到此异常:

  

HTTP状态500 -

     

输入例外报告

     

消息

     

description服务器遇到阻止的内部错误()   它来自履行这一要求。

     

例外

     

javax.servlet.ServletException:servlet spring的Servlet.init()   扔了例外     org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)     org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)     org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)     org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)     org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)     org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:579)     org.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run(JIoEndpoint.java:307)     java.util.concurrent.ThreadPoolExecutor中的$ Worker.runTask(ThreadPoolExecutor.java:885)     java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:907)     java.lang.Thread.run(Thread.java:619)根本原因

     

org.springframework.beans.factory.BeanDefinitionStoreException:   从类路径资源解析XML文档时发生意外异常   [COM /演示/弹簧/安全integration.xml];嵌套异常是   org.springframework.beans.BeanInstantiationException:不能   实例化bean类   [org.springframework.security.config.SecurityNamespaceHandler]:   构造函数抛出异常;嵌套异常是   java.lang.NoClassDefFoundError:   组织/ springframework的/安全/配置/方法/ InternalInterceptMethodsBeanDefinitionDecorator     org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:412)     org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334)     org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)     org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:174)     org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:209)     org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180)     org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsFromImportedResources(ConfigurationClassBeanDefinitionReader.java:293)     org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:118)     org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:105)     org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:261)     org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:178)     org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:617)     org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:446)     org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:631)     org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:495)     org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:449)     org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:133)     javax.servlet.GenericServlet.init(GenericServlet.java:160)     org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)     org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)     org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)     org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)     org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)     org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:579)     org.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run(JIoEndpoint.java:307)     java.util.concurrent.ThreadPoolExecutor中的$ Worker.runTask(ThreadPoolExecutor.java:885)     java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:907)     java.lang.Thread.run(Thread.java:619)根本原因

     

org.springframework.beans.BeanInstantiationException:无法   实例化bean类   [org.springframework.security.config.SecurityNamespaceHandler]:   构造函数抛出异常;嵌套异常是   java.lang.NoClassDefFoundError:   组织/ springframework的/安全/配置/方法/ InternalInterceptMethodsBeanDefinitionDecorator     org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:162)     org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:104)     org.springframework.beans.factory.xml.DefaultNamespaceHandlerResolver.resolve(DefaultNamespaceHandlerResolver.java:129)     org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1414)     org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1409)     org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:184)     org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:140)     org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:111)     org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:493)     org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:390)     org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334)     org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)     org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:174)     org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:209)     org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180)     org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsFromImportedResources(ConfigurationClassBeanDefinitionReader.java:293)     org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:118)     org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:105)     org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:261)     org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:178)     org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:617)     org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:446)     org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:631)     org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:495)     org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:449)     org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:133)     javax.servlet.GenericServlet.init(GenericServlet.java:160)     org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)     org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)     org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)     org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)     org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)     org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:579)     org.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run(JIoEndpoint.java:307)     java.util.concurrent.ThreadPoolExecutor中的$ Worker.runTask(ThreadPoolExecutor.java:885)     java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:907)     java.lang.Thread.run(Thread.java:619)根本原因

1 个答案:

答案 0 :(得分:1)

我通过在maven pom文件中删除对AOP的依赖来解决了这个问题:

<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>