当前位置: 首页 > 知识库问答 >
问题:

使用Spring安全性进行身份验证

王凯旋
2023-03-14

我正在尝试通过连接到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 -

类型异常报告

消息

描述服务器遇到一个内部错误(),该错误阻止它完成此请求。

例外情况

javax.servlet。ServletException:Servlet。servlet spring的init()引发异常org.apache.catalina.authenticator.authenticator AuthentimatorBase.invoke(AuthentiatorBase.java:472)org.apacher.catalina.valves.ErrorReportValve.invokenorg.apache.coyote.http11.抽象Http11Processor.process(AbstractHttp11处理器.java:987)org.apacher.coyote.AbstractProtocol$AbstractConnectionHandler.process(抽象协议.java:579)org.aapache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndboint.java:307)java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPool Executor.java:085)java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPool Executor.java:907)java.lang.Thread.run

org . spring framework . beans . factory . bean definitionstoreexception:从类路径资源解析XML文档时出现意外异常[com/demo/spring/security-integration . XML];嵌套异常为org . spring framework . beans . bean instantiation exception:无法实例化bean类[org . spring framework . security . config . securitynamespacehandler]:构造函数引发了异常;嵌套的异常是Java . lang . noclassdeffounderror:org/spring framework/security/config/method/internal interceptumethodsbeandedefinitioncorator org . spring framework . beans . factory . XML . xmlbeandefinitionreader . doloadbeandeditions(xmlbeandefinitionreader . Java:412)org . spring framework . beans . factory . XML . xmlbeandefinitionreader . loadbean definitions(xmlbeandements . Java:334)org . spring framework . beans . factory . XML . xmlbeandefinitionreader . loadbean definitions

org . spring framework . beans . bean instantiation exception:无法实例化bean类[org . spring framework . security . config . securitynamespacehandler]:构造函数引发了异常;嵌套异常为Java . lang . noclassdeffounderror:org/spring framework/security/config/method/internal interceptumethodsbeandedefinitioncorator org . spring framework . beans . bean utils . instantiate class(bean utils . Java:162)org . spring framework . beans . bean utils . instantiate class(bean utils . Java:104)org . spring framework . beans . factory . XML . defaultnamespachandlerresolver . resolver(defaultnamespace handlerresolver . Java:129)org . spring framework . beans . factory

共有1个答案

楚博雅
2023-03-14

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

<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
 类似资料:
  • 我正在尝试让JDBC身份验证与我的小辅助项目一起工作,从表面上看,它应该可以工作,但它没有。所有的配置都遵循贝娄。 如果我切换到具有相同用户名/密码的inMemory身份验证,它就会非常工作。 这是我记录输出时得到的结果:

  • 但是该实现假设身份验证也是通过存储在数据库中的密码(@Password注释)完成的。我们希望根据LDAP对用户进行身份验证,然后根据存储在数据库中的内容分配角色。 是否有可用的教程/拦截器?我为每一个输入感到高兴? PS:quarkus安全ldap扩展不是解决方案,因为它假设角色也存储在ldap中。

  • 我在试着做一件简单的事。 接下来是设置我的keycloak信息(realm,role,user)https://medium.com/@bcarunmail/securing-rest-api-using-keycloak-and-spring-oauth2-6ddf3a1efcc2 所以, 我基本上用一个客户机、一个具有特定角色“user”的用户来设置我的keycloak,并像这样配置它: 但当

  • 我正在开发REST webService,我的一些客户机将使用我的webservices,所以为了识别真正的客户机,我决定给每个真正的客户机一个唯一的应用程序令牌。客户机将对这个令牌进行编码,他们将把这个令牌放在请求头中,我已经在我的REST webservices中配置了一个REST过滤器来验证令牌。我不想使用https。我的问题是,任何人都可以从我的客户端站点获取该令牌,并可以使用我的REST