搭建spring security 的嵌入式LDAP报错如下,提示缺少directoryserivce的类,但是我找了很久,试了pom.ml很多依赖还是没能成功,我的框架是spring+springmvc+security+LDAPContext initialization failed java.lang.NoClassDefFoundError:org/apache/directory/server/core/DirectoryServicepom.xml相关配置如下<dependency>
<groupId>org.apache.geronimo.plugins</groupId>
<artifactId>directory</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.apache.directory.server</groupId>
<artifactId>apacheds-service</artifactId>
<version>2.0.0-M21</version>
</dependency>
<dependency>
<groupId>org.apache.directory.server</groupId>
<artifactId>apacheds-core</artifactId>
<version>1.5.5</version>
</dependency>
<dependency>
<groupId>org.apache.directory.server</groupId>
<artifactId>apacheds-server-jndi</artifactId>
<version>1.5.5</version>
</dependency>
<dependency>
<groupId>org.apache.directory.server</groupId>
<artifactId>apacheds-all</artifactId>
<version>1.5.5</version>
</dependency>
<dependency>
<!-- Required by ApacheDS, but not listed in its POM -->
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.1</version>
</dependency>我的security.xml配置如下,因为是跟着书里的教程做的,里面还有一些其他的配置?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:security="http://www.springframework.org/schema/security"
xmlns:="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.2.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"
>
<security:debug />
<!--对Controller方法拦截的Security框架的配置-->
<security:global-method-security jsr250-annotations="enabled" secured-annotations="enabled" pre-post-annotations="enabled"/>
<security:http pattern="/login" security="none" />
<security:http pattern="/home" security="none"/>
<security:http pattern="/" security="none" />
<!--<security:http pattern="/login.do" security="none" />-->
<security:http pattern="/static/css/favicon.ico" security="none"/>
<security:http auto-config="true" use-expressions="true" >
<security:access-denied-handler error-page="/accessDenied.do"/>
<security:session-management session-fixation-protection="migrateSession">
<security:concurrency-control max-sessions="10" expired-url= "/login.do?error=expired"/>
</security:session-management>
<!--<security:intercept-url pattern="/**" access="hasRole('ROLE_ADMIN')" />-->
<security:intercept-url pattern="/login.do" access="permitAll" requires-channel="https" />
<security:intercept-url pattern="/**" access="hasRole('ROLE_ADMIN') or hasRole('ROLE_USER')" requires-channel="https"/>
<security:remember-me key="jbcpPetStore" services-ref="ipTokenBasedRememberMeServicesBean"/>
<security:form-login
login-page="/login.do"
username-parameter="username"
password-parameter="password"
default-target-url="/header"
/>
<security:custom-filter ref="requestHeaderFilter" before="FORM_LOGIN_FILTER"/>
<security:remember-me key="jbcpPetStore" token-validity-seconds="360" user-service-ref="myUserDetailService"/>
<security:logout invalidate-session="true" logout-success-url="/" logout-url="/logout"/>
<security:custom-filter ref="ipFilter" before="FILTER_SECURITY_INTERCEPTOR"/>
</security:http>
<security:authentication-manager alias="authenticationManager">
<security:authentication-provider ref="signedRequestAuthenticationProvider"/>
<security:authentication-provider user-service-ref="myUserDetailService">
<security:password-encoder ref="BCryptEncoder"/>
</security:authentication-provider>
<security:ldap-authentication-provider server-ref="ldapLocal" user-search-filter="(uid={0})" group-search-base="ou=Groups"/>
</security:authentication-manager>
<security:ldap-server id="ldapLocal" ldif="classpath:JBCPPets.ldif" root="dc=jbcppets,dc=com"/>
<bean id="ipTokenBasedRememberMeServicesBean" class="com.ssm.security.IPTokenBasedRememberMeServices" >
<property name="key" value="jbcpPetStore"/>
<property name="userDetailsService" ref="myUserDetailService"/>
<!-- To experiment with changing the checkbox name and cookie name 注意要与jsp页面的名字匹配-->
<!-- <property name="parameter"><value>_remember_me</value></property>
<property name="cookieName"><value>REMEMBER_ME</value></property>-->
</bean>
<bean id="authenticationFilter" class= "org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter">
<property name ="authenticationManager" ref="authenticationManager"/>
</bean>
<bean id="myUserDetailService" class="com.ssm.security.MyUserDetailService" >
</bean>
<bean id="BCryptEncoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder" />
<bean id="ipFilter" class="com.ssm.security.IPRoleAuthenticationFilter">
<property name="targetRole" value="ROLE_ADMIN"/>
<property name="allowedIPAddresses">
<list>
<value>0:0:0:0:0:0:0:1</value>
</list>
</property>
</bean>
<bean id="signedRequestAuthenticationProvider" class="com.ssm.security.SignedUsernamePasswordAuthenticationProvider">
<property name="passwordEncoder" ref="BCryptEncoder"/>
<property name="userDetailsService" ref="myUserDetailService"/>
</bean>
<bean id="requestHeaderFilter" class="com.ssm.security.RequestHeaderProcessingFilter">
<property name="authenticationManager" ref="authenticationManager"/>
</bean>
</beans>以下是我照做的例子 配置 LDAP 服务器引用
第一步是在 dogstore-security.xml 中声明嵌入式 LDAP 服务器的引用。LDAP 服务器的声明在<http>元素之外,与<authentication-manager>相同的等级:
<ldap-server ldif="classpath:JBCPPets.ldif" id="ldapLocal"
root="dc=jb cppets,dc=com"/>
我们从 classpath 中加载 JBCPPets.ldif,并用其为 LDAP 服务器插入数据。这意味着(如
同嵌入式 HSQL 数据库启动那样)我们应该在 WEB-INF/classes 放置 JBCPPets.ldif 文件。root属性用特定的 DN 声明了LDAP 目录的根。这应该与我们使用的 LDIF 文件逻辑根 DN 相对应。
【注意,对于嵌入式的LDAP 服务器,root 是必须的,尽管 XML 模式并没有这样声明。如果它没有指明或指明错误,你会在 Apache DS server 启动的时候看待几个奇怪的错误。】
当我们在 Spring Security 配置文件中声明 LDAP 用户服务和其它配置元素时,会重用这里定义的 bean ID。对于嵌入式的 LDAP 模式来说,<ldap-server>声明的其它属性都是可选的。
启用 LDAP AuthenticationProvider
接下来,我们要配置另一个 AuthenticationProvider,它用 LDAP 来检查用户凭证。简单得添加另一个 AuthenticationProvider 即可,如下:
<authentication-manager alias="authenticationManager">
<!-- Other authentication providers are here -->
<ldap-authentication-provider server-ref="ldapLocal" user-search-filter="(uid={0})"
group-search-base="ou=Groups"
/>
</authentication-manager>
我们稍后将会介绍这些属性——现在,回到应用并运行,使用用户名 ldapguest 和密码
password 进行登录。你应该能够登录进去了!
添加回答
举报
0/150
提交
取消